Recover Binary Search Tree
Desicription
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?
Solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
class Solution { private: TreeNode* pre = new TreeNode(INT_MIN); TreeNode* first = NULL; TreeNode* second = NULL;
void searchTree(TreeNode* root) { if(!root) return ; searchTree(root->left); if(!first && pre->val >= root->val) first = pre; if(first && pre->val >= root->val) second = root; pre = root; searchTree(root->right); } public: void recoverTree(TreeNode* root) { searchTree(root); swap(first->val, second->val); } };
|