题目
二叉搜索树中的两个节点被错误地交换。
请在不改变其结构的情况下,恢复这棵树。
思路
- 在中序遍历的过程中,保存不在增序的节点,一旦找到直接退出递归。然后更换这两个节点的值
class Solution:
def recoverTree(self, root: TreeNode) -> None:
"""
Do not return anything, modify root in-place instead.
"""
x = y = None
second = False
last_node = None
def walk(p):
nonlocal x, y, last_node, second
if not p:
return None
flag = walk(p.left)
if flag:
return True
val = p.val
if last_node is None:
last_node = p
else:
print(val)
if val < last_node.val:
if second:
y = p
return True
else:
x = last_node
y = p
second = True
last_node = p
return walk(p.right)
walk(root)
x.val, y.val = y.val, x.val