LeetCode Recover Binary Search Tree
来源:互联网 发布:唯一网络哪里人王宇杰 编辑:程序博客网 时间:2024/06/07 01:16
Description:
Two elements of a binary search tree (BST) are swapped by mistake.
Recover the tree without changing its structure.
Solution:
这道题目最naive的解法就是利用中序排序,然后把所有的数字取出来,排序之后在利用中序遍历重新赋值。
另外还有一种更优的解法。
中序遍历的一个特点就是在遍历的过程当中就已经相当于按照大小顺序遍历(对于BST如此),所以我们如果能够在遍历的过程中将两个节点找到即可。
中序遍历时需要记录按照大小顺序前一个节点prev,如果前一个节点prev的值大于等于当前节点root的值就表示这里顺序有问题。分为两种情况:
1) a, c, b, d, e, 需要查找的两个节点相邻
2) a, d, c, b, e, 需要查找的两个节点不相邻
这两种方式可以统一用一种表达方式:
第一次出现 a1 > a2的a1是第一个需要换的数字。
最后一次出现a1 > a2的a2是第二个需要换的数字。
也就是说:
第一次出现prev.val > root.val的prev是第一个需要换的节点。
最后一次出现prev.val>root.val的root是第二个需要换的节点。
注:需要对BST的中序遍历理解比较深刻。
<span style="font-size:18px;">import java.util.*;public class Solution {TreeNode first;TreeNode second;TreeNode pre;public void recoverTree(TreeNode root) {dfs(root);int v = first.val;first.val = second.val;second.val = v;}public void dfs(TreeNode root) {if (root == null)return;dfs(root.left);if (pre != null && root.val <= pre.val) {if (first == null)first = pre;second = root;}pre = root;dfs(root.right);}}</span>
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
- 深入理解Tomcat 6和Tomcat7的区别
- Mac 下配置 Latex 支持中文
- 从头认识java-17.1 多线程
- Local模式下开发第一个Spark程序并运行于集群环境
- arXiv 2015深度学习年度十大论文
- LeetCode Recover Binary Search Tree
- Java Swing JTable 表格【3:创建表格,表头存在的设置】
- Windows下Apache配置基础
- javascript 控制 DIV等html元素的显示和隐藏 .
- Linux下apache配置基础
- 江湖有凶险,创业须谨慎!
- 人生的三把钥匙
- python的reduce函数和map函数
- Flask源码阅读(八)——请求钩子