leetCode 99.Recover Binary Search Tree(修正二叉搜索树) 解题思路和方法
来源:互联网 发布:园林绿化施工网络 编辑:程序博客网 时间:2024/05/16 02:11
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?
思路:因为有两个节点错位, 需要交换回来,最简单的方法就是中序遍历,然后排序即可。
代码如下:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { ArrayList<TreeNode> list = new ArrayList<TreeNode>(); public void recoverTree(TreeNode root) { preOrder(root); TreeNode p = null; TreeNode q = null; if(list.size() < 2) return; //冒泡排序 for(int i = 0; i < list.size() -1; i++){ boolean flag = true; for(int j = 0; j < list.size() - 1 - i; j++){ if(list.get(j).val > list.get(j+1).val){ flag = false; int k = list.get(j).val; list.get(j).val = list.get(j+1).val; list.get(j+1).val = k; } } if(flag){ break; } } } /** * 中序遍历 */ private void preOrder(TreeNode root){ if(root == null) return; preOrder(root.left); list.add(root); preOrder(root.right); }}
但是题目要求尽量O(1)的空间,故换一种方法,还是中序遍历,不符合要求的节点保存,同时记录父节点,如果不符合要求的节点只有一个,则说明另一个节点为父节点。
具体代码如下“:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution {TreeNode parent = null;TreeNode p = null; TreeNode q = null; public void recoverTree(TreeNode root) { //参考资料:http://blog.csdn.net/worldwindjp/article/details/21694179 check(root); if(p != null && q != null){ int k = p.val; p.val = q.val; q.val = k; } } /** * 中序遍历 */ private void check(TreeNode root){ if(root == null) return; if(root.left != null){ check(root.left); } //这段代码是重点 //parent是左子树父节点 if(parent != null && parent.val > root.val){ if(p == null){ p = parent; q = root; }else{ q = root; } } parent = root; if(root.right != null){ check(root.right); } }}
0 0
- leetCode 99.Recover Binary Search Tree(修正二叉搜索树) 解题思路和方法
- leetCode 98.Validate Binary Search Tree (有效二叉搜索树) 解题思路和方法
- Leetcode 99. Recover Binary Search Tree 恢复二叉搜索树 解题报告
- 【修正二叉树】Recover Binary Search Tree
- [leetcode-二叉查找树的修正]--99. Recover Binary Search Tree
- leetCode 95.Unique Binary Search Trees II (唯一二叉搜索树) 解题思路和方法
- leetCode 96.Unique Binary Search Trees (唯一二叉搜索树) 解题思路和方法
- LeetCode | Recover Binary Search Tree(恢复二叉搜索树)
- LeetCode 99. Recover Binary Search Tree(修复二叉搜索树)
- Recover Binary Search Tree 修正二叉查找树
- leetcode 99. Recover Binary Search Tree 二叉树非递归遍历,利用stack和morris遍历
- leetCode Recover Binary Search Tree解题分享
- 【LeetCode】Recover Binary Search Tree 解题报告
- [LeetCode] 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(Hard)解题报告
- SDK manager无法启动
- vs2010中objectARX工程创建类
- oracle HANA sum等计算函数会自动过滤空值
- CentOS 6.6安装Horizon View Client3.4
- 设计模式C++实现(1)——工厂模式
- leetCode 99.Recover Binary Search Tree(修正二叉搜索树) 解题思路和方法
- 关于字典管理颜色,对颜色进行分类管理的问题
- html js form
- 分页显示数据库数据
- 正方形计数问题(穷举+pair+struct/C++)
- JavaScript之正则表达式入门
- js关闭页面不提示
- 通过uri呼起本地app
- org.hibernate.AnnotationException: No identifier specified for entity