您的位置:首页 > 其它

Recover Binary Search Tree

2014-08-16 10:57 246 查看
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.

Have you been asked this question in an interview?

/**
* Definition for binary tree
* public class TreeNode {
*     int val;
*     TreeNode left;
*     TreeNode right;
*     TreeNode(int x) { val = x; }
* }
*/
public class Solution {
TreeNode first = null;
TreeNode second = null;
TreeNode last = new TreeNode(Integer.MIN_VALUE);
public void recoverTree(TreeNode root) {
inOrderTraverse(root);
if (second != null) {
int temp = first.val;
first.val = second.val;
second.val = temp;
}
}
void inOrderTraverse(TreeNode root) {
if (root == null) {
return;
}
inOrderTraverse(root.left);
//因为是中序遍历,所以第一个值肯定是偏大的那个
if (first == null && root.val < last.val) {
first = last;
//注意 不要写成else if,因为对于first 和 second 付值是不冲突的
} if (first != null && root.val < last.val) {
second = root;
// return;
// 注意这里不要写 return. 找到first以后,一直到second 之前的 所有数都要比first小。如果写return 了 返回的是 first之后
// 的第一个数,并比一定就是需要替换的数字。只有当 first 和second 是相邻的节点才正确。
}
last = root;
inOrderTraverse(root.right);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: