# 19.3.2 [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.

Example 1:

Input: [1,3,null,null,2]

1
/
3
\
2

Output: [3,1,null,null,2]

3
/
1
\
2


Example 2:

Input: [3,1,4,null,null,2]

3
/ \
1   4
/
2

Output: [2,1,4,null,null,3]

2
/ \
1   4
/
3


• A solution using O(n) space is pretty straight forward.
• Could you devise a constant space solution?

## 题解

 1 class Solution {
2 public:
3     TreeNode*big = NULL, *small = NULL, *tmp;
4     TreeNode*last=NULL;
5     void search(TreeNode*root) {
6         if (big&&small||root==NULL)return;
7         if (root->left)
8             search(root->left);
9         if (last&&root->val < last->val) {
10             if (big == NULL) {
11                 big = last;
12                 tmp = root;
13             }
14             else if (small == NULL) {
15                 small = root;
16                 return;
17             }
18         }
19         last = root;
20         if (root->right)
21             search(root->right);
22     }
23     void recoverTree(TreeNode* root) {
24         search(root);
25         if (!small)
26             small = tmp;
27         swap(big->val, small->val);
28         return;
29     }
30 };
View Code

posted @ 2019-03-02 13:18  TobicYAL  阅读(152)  评论(0编辑  收藏  举报