669 Trim a Binary Search Tree

Given a binary search tree and the lowest and highest boundaries asLandR, 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

这题一开始做还以为是直接砍掉,后来认真看了第二个例子才发现是用left或right子树来replace。

public TreeNode trimBST(TreeNode root, int L, int R) {
    if (root == null) {
        return root;
    }        

    root.left = trimBST(root.left, L, R);
    root.right = trimBST(root.right, L, R);

    if (root.val < L) {
        return root.right;
    } 
    if (root.val > R) {
        return root.left;
    }        
    return root;
}

// 参考答案长这样:
public TreeNode trimBST(TreeNode root, int L, int R) {
    if (root == null) return root;
    if (root.val > R) return trimBST(root.left, L, R);
    if (root.val < L) return trimBST(root.right, L, R);

    root.left = trimBST(root.left, L, R);
    root.right = trimBST(root.right, L, R);
    return root;
}

Last updated