http://leetcode.com/onlinejudge#question_99
prev =null;
first =null;
second =null;
TreeNode first;
TreeNode second;
TreeNode prev;
public voidrecoverTree(TreeNode root) {
// Start typing your Java solution below
// DO NOT write main() function
prev = null;
first = null;
second = null;
helper(root);
int tmp = first.val;
first.val = second.val;
second.val = tmp;
}
void helper (TreeNoderoot) {
if (root == null) {
return;
}
helper(root.left);
if (prev != null&& root.val <prev.val) {
if (first== null) {
first = prev;
second = root;
} else{
second = root;
return;
}
}
prev = root;
helper (root.right);
}
两个node被调换了,回复原来的二叉树。常数空间。
做这道题的时候,一个血的教训就是在递归的时候,不要global初始class member。开始我没有设
而是仅仅声明了三个变量。这时出现的test fail:
input | output | expected | |
---|---|---|---|
{2,#,1} | {2,#,0} | {1,#,2} |
public class Solution {
}