题目链接
https://leetcode.com/problems/recover-binary-search-tree/
题目原文
Two elements of a binary search tree (BST) are swapped by mistake.
Recover the tree without changing its structure.
题目大意
给定一棵二叉搜索树,其中有两个元素的位置互换了,需要恢复原本的二叉树
解题思路
参考https://leetcode.com/discuss/61332/99%25-python-solution
第一次遇到逆序记录prev和cur
如果第二次遇到逆序只记录cur
最后swap prev和cur
代码
# Definition for a binary tree node.
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution(object):
def recoverTree(self, root):
"""
:type root: TreeNode
:rtype: void Do not return anything, modify root in-place instead.
"""
self.inorder(root)
self.n1.val, self.n2.val = self.n2.val, self.n1.val
def __init__(self):
self.n1 = None
self.n2 = None
self.pre = None
def inorder(self, root):
if not root:
return root
self.inorder(root.left)
if not self.pre:
self.pre = root
else:
if not self.n1 and root.val < self.pre.val:
self.n1 = self.pre
if self.n1 and root.val < self.pre.val:
self.n2 = root
else:
self.pre = root
self.inorder(root.right)