Recovery Binary Search Tree Leetcode Python

来源:互联网 发布:日本二战殖民地知乎 编辑:程序博客网 时间:2024/04/28 16:11

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

Recover the tree without changing its structure.

题目要求找到BST中被swap的两个节点并把它们复原,这里考虑到是BST 我们可以用Inorder traverse,如果没有被调换之前的所有节点值满足序号从小到大 数组依次增大。 如果被调换,假如原来序列为1 2 3 4 5 6 7,这里假设1和7被调换,最后为7 2 3 4 5 6 1 第一个被调换的数是比后面的数大 7>2 第二个被调换的是1 比前面的小 6>1,依次取出 7 和1 将他们换回去,可以得到答案。

This problem can be solved by using inorder traverse, in general BST if we inorder traverse the tree, we can get an array with increasing order. However, if two of the nodes are swapped, lets assume the original order is 1 2 3 4 5 6 7, we swap 1 and 7 here. The result will become 7 2 3 4 5 6 1, the first swapped element is the node greater than its post node, which is 7>2. The second node will be the node smaller than its pre node 6>1.

Now we need to swap these two nodes, we get the answer.


# 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    def inorder(self,root):        if root:            self.inorder(root.left)            if self.prev and self.prev.val>root.val:                self.n2=root                if self.n1==None:                    self.n1=self.prev            self.prev=root            self.inorder(root.right)    def recoverTree(self, root):        self.n1,self.n2=None,None        self.prev=None        self.inorder(root)        self.n1.val,self.n2.val=self.n2.val,self.n1.val        return root



 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 干柠檬片过期了怎么办 山地玫瑰根黑了怎么办 带18k的金过敏怎么办 18k钻戒断了怎么办 18k钻戒戒托变色怎么办 苹果七中间按键脱漆怎么办 苹果手机屏幕边缘掉漆了怎么办 十八k白金变色了怎么办 手机后面掉漆了怎么办 玫瑰金戒指刮花了怎么办 玫瑰金手镯刮花了怎么办 玫瑰金链子断了怎么办 dw玫瑰金掉色了怎么办 6s玫瑰金氧化了怎么办 书本湿的很严重怎么办 除湿盒的水满了怎么办 书被水泡变黄了怎么办 文件纸被弄皱了怎么办 纸的一角皱了怎么办 裤子被雨水打湿变色了怎么办 书本上粘了有油怎么办 手被水泡了皱了怎么办 水泡破了感染了怎么办 夏天腋下出汗会弄湿衣服怎么办 夏天腋下出汗多弄湿衣服怎么办 上眼皮干燥起皮怎么办 怀孕下面湿又痒怎么办 内裤穿久了有异味怎么办 刨腹产私处捂烂了怎么办 猫咬手指出血了怎么办 老有白带涌出来怎么办 耳朵里塞了珠子怎么办 树脂发光字烧了怎么办 马蹄莲长得太高怎么办 百合球的芽断了怎么办 种的百合开败怎么办 盆栽百合花开完之后怎么办 土养百合花谢了怎么办 多肉叶子不饱满怎么办 冬天富贵竹叶子发黄怎么办水养 富贵竹叶子发黄怎么办水养