leetcode99. 恢复二叉搜索树

版权声明:本文为博主原创文章,未经博主允许不得转载。 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)

猜你喜欢

转载自blog.csdn.net/sinat_36811967/article/details/88390725