package com.fishercoder.solutions;

import com.fishercoder.common.classes.TreeNode;

/**
 * 669. Trim a Binary Search Tree
 *
 * 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

 */
public class _669 {
    public static class Solution1 {
        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;
        }
    }
}

@@ -82,496 +82,8 @@
 e;%0A%0A
-/**%0A * 669. Trim a Binary Search Tree%0A *%0A * Given a binary search tree and the lowest and highest boundaries as L and R,%0A * trim the tree so that all its elements lies in %5BL, R%5D (R %3E= L).%0A * You might need to change the root of the tree, so the result should return the new root of the trimmed binary search tree.%0A%0A Example 1:%0A%0A Input:%0A   1%0A  / %5C%0A 0   2%0A%0A L = 1%0A R = 2%0A%0A Output:%0A 1%0A  %5C%0A  2%0A%0A Example 2:%0A%0A Input:%0A  3%0A / %5C%0A0   4%0A %5C%0A 2%0A /%0A1%0A%0A L = 1%0A R = 3%0A%0A Output:%0A    3%0A   /%0A  2%0A /%0A1%0A%0A */%0A
 publ

refactor 669