LeetCode刷题笔录Recover Binary Search Tree
来源:互联网 发布:js判断input是否选中 编辑:程序博客网 时间:2024/05/21 11:00
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?
confused what "{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
和Valid Binary Search Tree那题比较像,也是要做一个in order traversal,过程中比较当前node的值和之前一个node的值得大小,看看有没有反序的情况。
有两种情况:1是两个相邻的元素被交换了,比如12345678 -> 12354678,反序只会发生一次,因此记录5,4两个node就对了
2是不相邻元素被交换了,比如12345678 -> 12745638,反序会发生两次,一次在74一次在63.可以看出需要交换的元素是7和3,即第一次反序的前一个元素和第二次反序的后一个元素。
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { public void recoverTree(TreeNode root) { ArrayList<TreeNode> pre = new ArrayList<TreeNode>(); pre.add(null); ArrayList<TreeNode> nodes = new ArrayList<TreeNode>(); inorder(root, pre, nodes); int temp = nodes.get(0).val; nodes.get(0).val = nodes.get(1).val; nodes.get(1).val = temp; } public void inorder(TreeNode root, ArrayList<TreeNode> pre, ArrayList<TreeNode> nodes){ if(root == null) return; inorder(root.left, pre, nodes); if(pre.get(0) != null && root.val < pre.get(0).val){ if(nodes.size() == 0){ nodes.add(pre.get(0)); nodes.add(root); } else{ nodes.set(1, root); } } pre.set(0, root); inorder(root.right, pre, nodes); }}
0 0
- LeetCode刷题笔录Recover Binary Search Tree
- LeetCode刷题笔录Recover Binary Search Tree
- LeetCode刷题笔录 Validate Binary Search Tree
- [leetcode刷题系列]Recover Binary Search Tree
- leetcode 刷题之路 18 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
- MongoDB aggregate 运用篇 个人总结
- Dijkstra's Algorithm
- LINUX文件系统详解
- 黑马程序员——Java基础---Servlet生命周期与工作原理
- hybris学习笔记:Trail+~+Preparation
- LeetCode刷题笔录Recover Binary Search Tree
- c#从数据库中取出一字段
- ACM-排列组合
- 黑马程序员——Java---Socket网络编程原理
- CXF完整实现WebService
- Spring mvc+hibernate+freemarker(实战)
- 关于动态表单的设计javaweb
- 获取网卡驱动信息
- 设计模式之中介者模式