leetcode_99_Recover Binary Search Tree
来源:互联网 发布:java数组 编辑:程序博客网 时间:2024/06/08 03:28
描述:
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.
OJ's Binary Tree Serialization:
The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.
Here's an example:
1 / \ 2 3 / 4 \ 5The above binary tree is serialized as
"{1,2,3,#,#,4,#,#,5}"
.思路:
首先中序遍历二叉查找树并将遍历的节点存储到一个list中,然后对list中的值进行比较,查找出位置出现变化的两个结点,将两个结点的值进行互换,完成本题的要求。
但是呢,对于如何发现位置出现变化的两个结点是本题的重点和难点,具体判断条件可以参见下面的程序,最后对查到的结点进行取舍也是一大问题,一般符合判断条件的结点会出现三个,我取的是第一个和第三个,这不好讲清楚,具体可自行推敲。
代码:
/** * 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) {List<TreeNode>list=new ArrayList<TreeNode>(); if(root==null) return; Stack<TreeNode>st=new Stack<TreeNode>(); st.push(root); TreeNode top=null; while(!st.empty()) { top=st.peek(); while(top.left!=null) { st.push(top.left); top=top.left; } while(top.right==null) { list.add(top); st.pop(); if(!st.empty()) top=st.peek(); else break; } if(!st.empty()) { list.add(top); st.pop(); st.push(top.right); } } int len=list.size()-1; List<Integer>indexList=new ArrayList<Integer>(); if(list.get(0).val>list.get(1).val) indexList.add(0); for(int i=1;i<len;i++) { if(list.get(i).val<list.get(i-1).val||list.get(i).val>list.get(i+1).val) indexList.add(i); } if(list.get(len).val<list.get(len-1).val) indexList.add(len); TreeNode node1=list.get(indexList.get(0)); TreeNode node2=list.get(indexList.get(indexList.size()-1)); int temp=node1.val; node1.val=node2.val; node2.val=temp; }}
结果:
0 0
- leetcode_99_Recover Binary Search Tree
- leetcode_99_Recover Binary Search Tree
- search - binary search/sort tree
- Implement Binary Search Tree
- Binary Search Tree
- binary search tree
- Binary Search Tree
- Binary Search Tree
- Binary Search Tree 实现
- Validate Binary Search Tree
- binary search tree
- Unique Binary Search Tree
- Validate Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Validate Binary Search Tree
- Validate Binary Search Tree
- Recover Binary Search Tree
- android 中layer-list的用法
- Python __all__
- 图论是理解大数据的关键吗?
- cin cin.get() cin.getline() string类成员函数getline(cin,str)使用方法区别与联系
- Linux进程通信之消息队列
- leetcode_99_Recover Binary Search Tree
- Redis 2.8.18 安装报错 error: jemalloc/jemalloc.h: No such file or directory
- 每个人都是独一无二的
- javascript加RoR实现JSONP
- mysql管理用户权限grant与revoke命令
- sqoop1.99.4的安装和使用
- Ubuntu下移动文件和修改文件名
- 1.Google RPC-一个RPC库和框架
- 第四周 项目一-三角形类的构造函数