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 };View Code
这题应该可以直接换值吧?如果不能的话就需要再改改了