題目
二叉搜索樹中的兩個節點被錯誤地交換。
請在不改變其結構的情況下,恢復這棵樹。
思路
- 在中序遍歷的過程中,保存不在增序的節點,一旦找到直接退出遞歸。然後更換這兩個節點的值
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