美文网首页
99. Recover Binary Search Tree [

99. Recover Binary Search Tree [

作者: 一个想当大佬的菜鸡 | 来源:发表于2019-07-12 09:29 被阅读0次

99. Recover Binary Search Tree

三个指针分别指向前一个节点,和需要交换的两个节点,当出现当前节点比之前节点小的情况时,如果a为空,则把pre赋值给a,如果a不为空,把当前节点赋值给b。

class Solution(object):
    def recoverTree(self, root):
        """
        :type root: TreeNode
        :rtype: None Do not return anything, modify root in-place instead.
        """
        self.pre, self.a, self.b = None, None, None
        self.dfs(root)
        temp = self.a.val
        self.a.val = self.b.val
        self.b.val = temp
        return 
    def dfs(self, root):
        if not root:
            return
        self.dfs(root.left)
        if self.pre and self.pre.val > root.val:
            if not self.a :
                self.a = self.pre
            if self.a:
                self.b = root
        self.pre = root
        self.dfs(root.right)

刚开始忘记更新pre,所以总出错

class Solution(object):
    def recoverTree(self, root):
        """
        :type root: TreeNode
        :rtype: None Do not return anything, modify root in-place instead.
        """
        a = b = pre = None
        stack = []
        node = root
        while stack or node:
            while node:
                stack.append(node)
                node = node.left
            if stack:
                node = stack.pop()
                if pre and pre.val > node.val:
                    if not a and not b:
                        a = pre
                        b = node
                    else:
                        b = node
                        break
                pre = node
                node = node.right
        if a and b:
            a.val, b.val = b.val, a.val

相关文章

网友评论

      本文标题:99. Recover Binary Search Tree [

      本文链接:https://www.haomeiwen.com/subject/abvskctx.html