Leetcode 99.恢复二叉搜索树
1 题目描述(Leetcode题目链接)
二叉搜索树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。
输入: [1,3,null,null,2]
1
/
3
\
2
输出: [3,1,null,null,2]
3
/
1
\
2
输入: [3,1,4,null,null,2]
3
/ \
1 4
/
2
输出: [2,1,4,null,null,3]
2
/ \
1 4
/
3
进阶:
- 使用 O ( n ) O(n) O(n) 空间复杂度的解法很容易实现。
- 你能想出一个只使用常数空间的解决方案吗?
2 题解
中序遍历交换两个逆序的节点值。二叉搜索树
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def recoverTree(self, root: TreeNode) -> None:
"""
Do not return anything, modify root in-place instead.
"""
node = root
pre, x, y = None, None, None
stack = []
while node or stack:
while node:
stack.append(node)
node = node.left
node = stack.pop()
if pre and node.val < pre.val:
if x:
y = node
break
x, y = pre, node
pre = node
node = node.right
x.val, y.val = y.val, x.val