美文网首页
669. Trim a Binary Search Tree

669. Trim a Binary Search Tree

作者: caisense | 来源:发表于2018-01-19 15:57 被阅读0次

    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
    

    思路:
    1.如果root在[L,R]范围内,返回root,并处理它的左子树和右子树.
    2.若root的val < L,则其左子树必小于L,因此root和其左子树不用再管,处理右子树.
    3.若root的val > R,思路类比于2.

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    
    class Solution {
    public:
        TreeNode* trimBST(TreeNode* root, int L, int R) {
            if (root == NULL) return NULL;
            if (root->val < L) return trimBST(root->right, L, R);
            if (root->val > R ) return trimBST(root->left, L, R);
            root->left = trimBST(root->left, L, R);
            root->right = trimBST(root->right, L, R);
            return root;
        }
    };
    

    相关文章

      网友评论

          本文标题:669. Trim a Binary Search Tree

          本文链接:https://www.haomeiwen.com/subject/tqogoxtx.html