[leetcode] Recover Binary Search Tree

来源:互联网 发布:db2查询数据库里 的表 编辑:程序博客网 时间:2024/06/06 16:58

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

Recover the tree without changing its structure.

Note:
A solution using O(n) space is pretty straight forward. Could you devise a constant space solution?

confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.

思路:对BST进行中序遍历,如果是正常的BST,则是顺序遍历。但因为有两个节点交换了,分两种情况,如果只遇到一个节点不满足前节点比后节点小,则该节点和前一个相邻节点交换了,如果遇到两个,则是这两个节点交换了。

#Definition for a  binary tree node#class TreeNode:#    def __init__(self, x):#        self.val = x#        self.left = None#        self.right = Noneclass Solution:    # @param root, a tree node    # @return a tree node    pre = None    err1 = None    err2 = None    def inorder(self,node):        if node == None:            return        self.inorder(node.left)        if self.pre != None and node.val < self.pre.val:            if self.err1 == None:                self.err1 = self.pre                self.err2 = node            else:                self.err2 = nodeself.pre = node        self.inorder(node.right)    def recoverTree(self, root):        self.inorder(root)        tmp = self.err1.val        self.err1.val = self.err2.val        self.err2.val = tmp        return root


0 0
原创粉丝点击