99. Recover Binary Search Tree
来源:互联网 发布:手机贴膜品牌 知乎 编辑:程序博客网 时间:2024/06/05 09:18
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的两个数交换了,修复BST。总体思路就是中序遍历,找到BST的两个错误的节点,然后交换数值。值得注意的是,错误的节点有两种情况,比如开始中序遍历为1,2,3,4,5
1、中序遍历相邻,比如1,3,2,4,5。此时中序遍历只会存在一次错误。
2、中序遍历不相邻,比如1,4,3,2,5.此时中序遍历会出现两次错误。
所以在实际处理时,在遇到第一次错误时,记录两个节点;如果之后还有错误,更新节点。
public class Solution { TreeNode m1, m2; //错误的两个值 TreeNode pre; //前一个节点,用于和当前节点比较,找出错误节 //findMistake功能:中序遍历,找出两个错误节点 void findMistake(TreeNode root) { if(root != null){ findMistake(root.left); if(pre != null && pre.val > root.val){ if(m1 == null){ //第一次遇到错误,记录两个节点 m1 = pre; m2 = root; } else{ //再次出现错误,更新错误节点 m2 = root; } } pre = root; findMistake(root.right); } } public void recoverTree(TreeNode root) { findMistake(root); if(m1 != null && m2 != null) { //交换两个错误节点 int tmp = m1.val; m1.val = m2.val; m2.val = tmp; } } }
0 0
- 99.Recover Binary Search Tree
- 99. Recover Binary Search Tree
- 99. Recover Binary Search Tree
- 99. Recover Binary Search Tree
- 99. Recover Binary Search Tree
- 99. Recover Binary Search Tree
- 99. Recover Binary Search Tree
- 99. Recover Binary Search Tree
- 99. Recover Binary Search Tree
- 99. Recover Binary Search Tree
- 99. Recover Binary Search Tree
- 99. Recover Binary Search Tree
- 99. Recover Binary Search Tree
- 99. Recover Binary Search Tree
- 99. Recover Binary Search Tree
- 99. Recover Binary Search Tree
- 99. Recover Binary Search Tree
- 99. Recover Binary Search Tree
- Service (aidl远程服务)
- 关于禁用数据库访问方法
- Android中关于Activity/ActionBarActivity/AppCompatActivity的区分与理解
- 数据结构(寒假小结)--3.1桟
- 命令和快捷键小结
- 99. Recover Binary Search Tree
- 仿EasyTouch实现一键返回功能
- Oracle创建表空间及在指定的表空间上创建数据库的步骤
- UITableView中Cell重用机制导致内容重复解决方法
- C#中WinForm窗体的单例模式,避免窗体被实例化多次
- 使用fragment,editvView ,listView,出现软键盘遮挡
- Xcode配置OpenGL
- Android中如何解析XML数据
- 飞控控制方法学习