版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_36811967/article/details/88390725
二叉搜索树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。
示例 1:
输入: [1,3,null,null,2]
输出: [3,1,null,null,2]
示例 2:
输入: [3,1,4,null,null,2]
输出: [2,1,4,null,null,3]
进阶:
使用 O(n) 空间复杂度的解法很容易实现。
你能想出一个只使用常数空间的解决方案吗?
中序遍历递归O(n)的空间复杂度:
# 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.
"""
self.tmp, self.left, self.right = None, None, None
self.helper(root)
self.left.val, self.right.val = self.right.val, self.left.val
def helper(self, node):
# 示例-1,5,2,3,1,7 第一次左大于右选左 最后一次左大于右选右
if not node:
return
# 中序遍历,左中右
self.helper(node.left)
if self.tmp and self.tmp.val > node.val:
if not self.left:
self.left = self.tmp
self.right = node
self.tmp = node # 指向前一个节点
self.helper(node.right)