Leetcode99 给定一个 二叉搜索树,其中两个节点被交换,写一个程序恢复这颗BST.
只想到了时间复杂度O(n)空间复杂度O(h) h为树高的解法,还没想到空间O(1)的解法。
交换的情况只有两种,
case1 两个节点在树中(中序遍历序列)相邻,
case2 两个节点在树中(中序遍历序列)不相邻。
只要三个指针 Pre first second 即可记录两种case
class Solution {  
public:  TreeNode *first;  TreeNode *second;  TreeNode *pre;  void inOrder(TreeNode *root){  if (root==NULL)  return;  inOrder(root->left);  if (pre == NULL){pre = root;}  else {  if (pre->val > root->val){  if (first==NULL) {first = pre;}  second = root;  }  pre = root;  }  inOrder(root->right);  }  void recoverTree(TreeNode *root) {  // Start typing your C/C++ solution below  // DO NOT write int main() function  pre = NULL;  first = NULL;  second= NULL;  inOrder(root);  int val;  val = first->val;  first->val=second->val;  second->val=val;  return;  }  
};