LeetCode 099 Recover Binary Search Tree
来源:互联网 发布:中国旅游服务贸易数据 编辑:程序博客网 时间:2024/06/02 04:23
题目
恢复BST,有两个点交换了。
代码
public class Solution { public void recoverTree(TreeNode root) { if(root == null){ return ; } ArrayList<TreeNode> record = new ArrayList<TreeNode>(); TreeNode first = null; TreeNode second = null; useme(record,root); for(int i=1;i<record.size();i++){ if(record.get(i-1).val>record.get(i).val){ if(first == null){ first = record.get(i-1); second = record.get(i); } else{ second = record.get(i); } } } int temp = first.val; first.val = second.val; second.val = temp; return; } public void useme(ArrayList<TreeNode> record , TreeNode root){ if(root!=null){ useme(record,root.left); record.add(root); useme(record,root.right); } }}
依然可以用inorder遍历的方法,转换为一个递增数组中,找到交换顺序的两个数。
上面的方法需要O(n)的空间,那么减少空间的方法,就是使用 Morris 中序遍历,定义再维基,百度都有,直接贴代码
public class Solution { public void recoverTree(TreeNode root) { if(root == null){ return ; } TreeNode pre = null; TreeNode cur = root; TreeNode first = null; TreeNode second = null; TreeNode a =null; TreeNode b = null; while(cur!=null){ if(cur.left==null){ if(first ==null) first = cur; else if(second == null) second = cur; else{ first = second; second = cur; } cur = cur.right; } else{ pre = cur.left; while(pre.right!=null && pre.right!=cur) pre = pre.right; if(pre.right == null){ pre.right = cur; cur = cur.left; continue; } else{ pre.right = null; if(second == null) second = cur; else{ first = second; second = cur; } cur = cur.right; } } if(first!=null && second!=null && first.val > second.val){ if(a == null) a = first; b = second; } } int temp = a.val; a.val = b.val; b.val = temp; }}
0 0
- LeetCode: Recover Binary Search Tree [099]
- LeetCode 099 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
- 用Maven创建Mahout项目
- 鸟哥Linux—第五章、首次登入与在线求助 man page
- 冒泡排序
- ZOJ 2833-Friendship
- Java String之String和CharSequence、StringBuilder和StringBuffer的区别
- LeetCode 099 Recover Binary Search Tree
- Linux C/C++ 模板:主模板、完全特化
- MyBatis+Spring-SqlSessionFactoryBean
- iOS gbk与utf8 互转
- [leetcode] #25 Recover Binary Search Tree
- 数据结构——串的模式匹配算法
- 淡若清风,静如兰
- 心累到底是什么?
- 计算机组成原理1