二叉查找树的恢复
solution:
思路:
- BFS中序遍历本应该是从小到大排列
- 设置两个全局变量,记录遍历中出错的两个节点
- 当当前节点大于上一个节点时,这两个节点被选为可能出错节点
- 将两个出错节点的值互换
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def reTre(self,root):
if root == None:
return;
Solution.reTre(self, root.left)
if self.pre != None:
if root.val < self.pre.val:
if self.swap1 == None:
self.swap1 = self.pre
self.swap2 = root
else:
self.swap2 = root
self.pre = root
Solution.reTre(self, root.right)
def recoverTree(self, root):
"""
:type root: TreeNode
:rtype: None Do not return anything, modify root in-place instead.
"""
self.swap1 =None
self.swap2 = None
self.pre = None
Solution.reTre(self,root)
tmp = self.swap1.val
self.swap1.val=self.swap2.val
self.swap2.val = tmp
return root