[Leetcode]@python 99. Recover Binary Search Tree

题目链接

https://leetcode.com/problems/recover-binary-search-tree/

题目原文

Two elements of a binary search tree (BST) are swapped by mistake.

Recover the tree without changing its structure.

题目大意

给定一棵二叉搜索树,其中有两个元素的位置互换了,需要恢复原本的二叉树

解题思路

参考https://leetcode.com/discuss/61332/99%25-python-solution

第一次遇到逆序记录prev和cur
如果第二次遇到逆序只记录cur
最后swap prev和cur

代码

# Definition for a binary tree node.
class TreeNode(object):
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None


class Solution(object):
    def recoverTree(self, root):
        """
        :type root: TreeNode
        :rtype: void Do not return anything, modify root in-place instead.
        """
        self.inorder(root)
        self.n1.val, self.n2.val = self.n2.val, self.n1.val

    def __init__(self):
        self.n1 = None
        self.n2 = None
        self.pre = None

    def inorder(self, root):
        if not root:
            return root

        self.inorder(root.left)
        if not self.pre:
            self.pre = root
        else:
            if not self.n1 and root.val < self.pre.val:
                self.n1 = self.pre
            if self.n1 and root.val < self.pre.val:
                self.n2 = root
            else:
                self.pre = root
        self.inorder(root.right)
原文地址:https://www.cnblogs.com/slurm/p/5221594.html