leetcode -- Recover Binary Search Tree -- 重点
来源:互联网 发布:aim120 pl12知乎 编辑:程序博客网 时间:2024/05/27 14:15
https://leetcode.com/problems/recover-binary-search-tree/
这里有两种思路
思路1
就是inorder遍历,把value 和 node都分别用list记录下来,然后将value的list重新排序,然后赋值给node 的list
但是这里 空间复杂度为O(n), 不符合题目要求
思路2
还是inorder遍历,但是这个时候用指针记录不符合BST的node,然后交换这两个node的val即可。。这里要注意交换值即可,node不变
参考http://www.cnblogs.com/zuoyuan/p/3746594.html
这里值得注意的就是被交换的两个node可能是root和root.left, 或者root与root.right, 或者是BST中隔得很远没什么关系的两个node。如下图所示。所以我们要固定其中一个被交换的node,这里程序中用self.prev来记录第一个被交换的点,当self.n1==None, 即没有被赋值的时候才更新n1.以后就不更新了,n1已经是其中一个被交换的点了。然后就要找另一个点,用root来记录当前被搜索的点,如果不满足BST的要求,就更新n2,直到找到另外一个被交换的点。
class Solution: # @param root, a tree node # @return a tree node def FindTwoNodes(self, root): if root: self.FindTwoNodes(root.left) #这里当前node是root,把root的序列存下来就是inorder #这里会不停地向左下角试探,一直到root是最左的node,那么root.left为NULL, #那么上面的这个FindTwoNodes会返回,再判断下一句,这里self.prev还是初始值None #所以要加上self.prev的判断,然后再判断是否有大小关系不对。 if self.prev and self.prev.val > root.val: self.n2 = root if self.n1 == None: self.n1 = self.prev#解释在上面思路部分 self.prev = root#这里把当前节点root记下来,再去scan右子树 self.FindTwoNodes(root.right) def recoverTree(self, root): self.n1 = self.n2 = None self.prev = None self.FindTwoNodes(root) self.n1.val, self.n2.val = self.n2.val, self.n1.val return root
0 0
- leetcode -- Recover Binary Search Tree -- 重点
- LeetCode: Recover Binary Search Tree
- LeetCode: Recover Binary Search Tree
- [Leetcode] Recover Binary Search Tree
- [LeetCode] Recover Binary Search Tree
- [Leetcode] Recover Binary Search Tree
- [leetcode] recover binary search tree
- LeetCode -- Recover Binary Search Tree
- [LeetCode]Recover Binary Search Tree
- [LeetCode] Recover Binary Search Tree
- LeetCode:Recover Binary Search Tree
- [Leetcode]Recover Binary Search Tree
- Leetcode: Recover Binary Search Tree
- LeetCode-Recover Binary Search Tree
- [leetcode] Recover Binary Search Tree
- [LeetCode] Recover Binary Search Tree
- 【Leetcode】Recover Binary Search Tree
- Leetcode Recover Binary Search Tree
- C语言特性(指针与数组)
- C语言特性(函数与指针)
- C语言特性(指针数组和指向指针变量的指针)
- Spring学习第二天——代理对象,AOP,Spring与JDBC结合,spring要与hibernate版本对应
- 我的GIS观
- leetcode -- Recover Binary Search Tree -- 重点
- C语言特性(结构体)
- 【android】EditText监听,根据输入内容查询数据并动态更新ListView
- 实现美团、饿了么购物车效果,并本地存储相关数据
- Ubuntu 默认启动命令行模式,以及开启图形界面
- LeetCode 16 - 3Sum Closest
- C语言特性(块)
- 利用try退出
- 杭电2187