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
Follow up:
- A solution using O(n) space is pretty straight forward.
- Could you devise a constant space solution?
题意
给出一棵标准BST树中两个结点互换后的树,要求互换前的BST树
题解
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 };
这题应该可以直接换值吧?如果不能的话就需要再改改了
注定失败的战争,也要拼尽全力去打赢它;
就算输,也要输得足够漂亮。