LeetCode 99 Recover Binary Search Tree
来源:互联网 发布:知乎 办公室装修 编辑:程序博客网 时间:2024/06/01 10:08
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?
想法很简单,找到两个顺序不对的点,最后交换。但是如何知道这两个点的顺序是不对的呢?因为BST是左<中<右,所以我们可以用in-order traverse(中序遍历)的方法:
其中In-order traverse模板:
public void inOrderTraverse{ inOrderTraverse(root.left); //do something inOrderTraverse(root.right);}
维护一个preNode节点,这个节点代表当前访问root节点的中序遍历(就是顺序排序)相对左边的一个,比如结果是45678的二叉树,root =7的时候,preNode就是6,root是8的时候,preNode=7。
Inorder traveral will return values in an increasing order. So if an element is less than its previous element,the previous element is a swapped node OR this element is a swapped node.
被交换的两个节点分别设为firstNode,secondNode,firstNode代表的是相对于secondNode偏左的节点,二者是被调换位置了。所以firstNode是相对root左边的节点preNode,secondNode是相对preNode右边的节点root。
Runtime: 4 ms beats 41.66% of java submissions.
static TreeNode firstNode = null;static TreeNode secondNode = null;static TreeNode preNode = new TreeNode(Integer.MIN_VALUE);public static void recoverTree(TreeNode root) {inorder(root);int tmp = firstNode.val;firstNode.val = secondNode.val;secondNode.val = tmp;}public static void inorder(TreeNode root) {if (root == null) return;inorder(root.left);if (root.val <= preNode.val) {if (firstNode == null) firstNode = preNode;secondNode = root;}preNode = root;inorder(root.right);}
- LeetCode 99: Recover Binary Search Tree
- LeetCode(99)Recover Binary Search Tree
- LeetCode 99 Recover Binary Search Tree
- LeetCode(99) Recover Binary Search Tree
- [leetcode 99] Recover Binary Search Tree
- [leetcode]99 Recover Binary Search Tree
- leetcode || 99、Recover Binary Search Tree
- 【LeetCode #99】Recover Binary Search Tree
- leetcode 99: Recover Binary Search Tree
- [leetcode-99]Recover Binary Search Tree(java)
- leetCode 99: Recover Binary Search Tree
- LeetCode(99) Recover Binary Search Tree
- LeetCode 99: Recover Binary Search Tree
- LeetCode 99:Recover Binary Search Tree
- (leetcode 99) Recover Binary Search Tree
- leetcode 99 Recover Binary Search Tree (python)
- LeetCode #99: Recover Binary Search Tree
- Leetcode 99 Recover Binary Search Tree
- ASC11排序
- tab切换
- Loadrunner 11安装 与 注册 要点
- redis 内存库设置 教你怎么解决64位Windows版Redis狂占C盘的问题.
- Java IO编程-文件(2)
- LeetCode 99 Recover Binary Search Tree
- 自己用的vim配置
- oracle千万级数据查询优化
- mvp模式的套路怎么写
- (其他2)VideoPlayer 介绍
- QT5实现贪吃蛇使用图形视图构架
- c/c++的堆与栈 与数据结构的堆和栈的区别
- android - ViewPager 监听左右滑动
- Linux中删除刚刚解压缩的文件