难点是给那个invaliPair赋值
有一种特殊情况是switch两个相邻的值,这样prev和curr会同时发现
所以不能用if else语句
这里的逻辑是每次都把curr更新为invalidPair[1]
而对于invalidPair[0]只赋值一次
这样如果相邻则一次性都赋值,如果不相邻后面的invalidPair[1]也会把之前的覆盖掉
74.90 %
/*
invalid pairs:
prev curr
prev curr
1 [4 3 2] 5
*/
public class Solution {
public void recoverTree(TreeNode root) {
TreeNode[] invalidPair = new TreeNode[2];
recoverTree(root, invalidPair);
if (invalidPair[0] != null && invalidPair[1] != null) {
int temp = invalidPair[0].val;
invalidPair[0].val = invalidPair[1].val;
invalidPair[1].val = temp;
}
}
private TreeNode prev = null;
private void recoverTree(TreeNode root, TreeNode[] invalidPair) {
if (root == null) return;
recoverTree(root.left, invalidPair);
if (prev != null && prev.val >= root.val) {
if(invalidPair[0] == null) {
invalidPair[0] = prev;
}
invalidPair[1] = root;
}
prev = root;
recoverTree(root.right, invalidPair);
}
}
No comments:
Post a Comment