leetcode-99. Recover Binary Search Tree
题目
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?
第二遍刷还是没想起来,这其实是非常漂亮的解法,BST如果先序遍历肯定是递增数列,那么我们的问题就在找到一串递增序列中的2个逆序的位置,然后用指针保存这两个值进行交换。但是一开始确实不容易想到。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
private TreeNode First;
private TreeNode Second;
private TreeNode dump = new TreeNode (Integer.MIN_VALUE);
public void recoverTree(TreeNode root) {
helper(root);
int tmp = First.val;
First.val = Second.val;
Second.val = tmp;
}
private void helper(TreeNode node){
if(node==null) return ;
helper(node.left);
if(First == null && dump.val >= node.val){
First = dump;
}
if(First != null && dump.val >= node.val){
Second = node;
}
dump = node;
helper(node.right);
}
}