1. 程式人生 > >LeetCode——Trim a Binary Search Tree(669)

LeetCode——Trim a Binary Search Tree(669)

Given a binary search tree and the lowest and highest boundaries as L and R, trim the tree so that all its elements lies in [L, R] (R >= L). You might need to change the root of the tree, so the result should return the new root of the trimmed binary search tree.

Example 1:

Input: 
    1
   / \
  0   2

  L = 1
  R = 2

Output:
1 \ 2

Example 2:

Input: 
    3
   / \
  0   4
   \
    2
   /
  1

  L = 1
  R = 3

Output: 
      3
     / 
   2   
  /
 1

分析:

因為是二叉搜尋樹,如果root->val比l小,那麼整個左子樹都可以扔掉;如果root->val比r小,則右子樹也可以扔掉。在下面的演算法理裡,如果越界,返回其沒越界的另一個子樹。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
static const auto __ = []() {
	std::ios::sync_with_stdio(false);
	std::cin.tie(0);
	return nullptr;
}();
class Solution {
public:
    TreeNode* trimBST(TreeNode* root, int &L, int &R) {
        if(root==NULL)
            return NULL;
        root->left = trimBST(root->left, L,R);
        root->right = trimBST(root->right, L, R);
        if(root->val<L||root->val>R)
        {
            if(root->left!=NULL)
                return root->left;
            if(root->right!=NULL)
                return root->right;
            return NULL;
        }
        return root;
    }
};