19.3.2 [LeetCode 99] Recover Binary Search Tree
阿新 • • 發佈:2019-03-02
public spl you nod 分享圖片 family etc for ons
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) {View Code6 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 };
這題應該可以直接換值吧?如果不能的話就需要再改改了
19.3.2 [LeetCode 99] Recover Binary Search Tree