public class Solution {
TreeNode mistake1, mistake2;;
TreeNode pre;
void recursive_traversal(TreeNode root) {
if(root==null) {
return;
}
if(root.left!=null) {
recursive_traversal(root.left);
}
if(pre!=null&&root.val<pre.val) {
if(mistake1==null) {
mistake1 = pre;
mistake2 = root;
} else {
mistake2 = root;
}
}
pre = root;
if(root.right!=null) {
recursive_traversal(root.right);
}
}
public void recoverTree(TreeNode root) {
//pre必须设为null,通过遍历的时候设进去。因为是中序遍历,所以pre应该是深层叶子左子树的父节点。
recursive_traversal(root);
if(mistake1!=null&&mistake2!=null) {
int tmp = mistake1.val;
mistake1.val = mistake2.val;
mistake2.val = tmp;
}
}
}LeetCode Recover Binary Search Tree,布布扣,bubuko.com
LeetCode Recover Binary Search Tree
原文:http://blog.csdn.net/worldwindjp/article/details/21694179