1. 程式人生 > >19.3.2 [LeetCode 99] Recover Binary Search Tree

19.3.2 [LeetCode 99] Recover Binary Search Tree

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) {
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

這題應該可以直接換值吧?如果不能的話就需要再改改了

19.3.2 [LeetCode 99] Recover Binary Search Tree