leetcode_99_Recover Binary Search Tree
2015-03-29 11:06
483 查看
描述:
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 \ 5
The 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;
}
}
结果:
相关文章推荐
- LeetCode 99 Recover Binary Search Tree(Python详解及实现)
- leetcode[99]Recover Binary Search Tree
- LeetCode 99: Recover Binary Search Tree
- LeetCode力扣之99. Recover Binary Search Tree
- leetcode99---Recover Binary Search Tree(morris中序遍历恢复BST)
- 【LeetCode 99】Recover Binary Search Tree
- [leetcode]99 Recover Binary Search Tree
- leetcode[99] Recover Binary Search Tree
- LeetCode-99-Recover Binary Search Tree 二叉树交换结点
- LeetCode(99) Recover Binary Search Tree
- LeetCode99 Recover Binary Search Tree
- LeetCode99—Recover Binary Search Tree
- [Leetcode] #99 Recover Binary Search Tree
- [leetcode-99]Recover Binary Search Tree(java)
- LeetCode 99 Recover Binary Search Tree
- LeetCode(99)Recover Binary Search Tree
- leetcode hard模式专杀之99. Recover Binary Search Tree
- [leetcode 99] Recover Binary Search Tree
- LeetCode 99 Recover Binary Search Tree
- leetcode || 99、Recover Binary Search Tree