Given the root
of a binary search tree and the lowest and highest boundaries as low
and high
, trim the tree so that all its elements lies in [low, high]
. Trimming the tree should not change the relative structure of the elements that will remain in the tree (i.e., any node’s descendant should remain a descendant). It can be proven that there is a unique answer.
Return the root of the trimmed binary search tree. Note that the root may change depending on the given bounds.
Example 1:
Input: root = [1,0,2], low = 1, high = 2
Output: [1,null,2]
Example 2:
Input: root = [3,0,4,null,2,null,null,1], low = 1, high = 3
Output: [3,2,null,1]
Example 3:
Input: root = [1], low = 1, high = 2
Output: [1]
Example 4:
Input: root = [1,null,2], low = 1, high = 3
Output: [1,null,2]
Example 5:
Input: root = [1,null,2], low = 2, high = 4
Output: [2]
Constraints:
-
The number of nodes in the tree in the range [ 1 , 1 0 4 ] [1, 10^4] [1,104].
-
0 < = N o d e . v a l < = 104 0 <= Node.val <= 104 0<=Node.val<=104
-
The value of each node in the tree is unique.
-
root
is guaranteed to be a valid binary search tree. -
0 < = l o w < = h i g h < = 1 0 4 0 <= low <= high <= 10^4 0<=low<=high<=104
使用带返回值的前后序混合递归模式。
个人感觉这题与LeetCode - Medium - 450. Delete Node in a BST性质类似
import com.lun.util.BinaryTree.TreeNode;
public class TrimABinarySearchTree {
// Time Complexity - We will have to visit every node once so O(N);
public TreeNode trimBST(TreeNode root, int L, int R) {
if (root == null)
return null;
// If the value of this node is less than L, then the whole left subtree will be smaller,
// so we can discard the left sub tree and return the root of the trimmed right sub tree
if (root.val < L)
return trimBST(root.right, L, R);
// If the value of this node is greater than R, then the whole right subtree will be greater
// so we can discard the right sub tree and return the root of the trimmed left sub tree
if (root.val > R)
return trimBST(root.left, L, R);
// If the value of this node does not need to be deleted,
// we need to pass this recursive call downwards to both sides
root.left = trimBST(root.left, L, R);
root.right = trimBST(root.right, L, R);
// All the processing of the subtrees done, now return this node
return root;
}
}
最后
现在正是金三银四的春招高潮,前阵子小编一直在搭建自己的网站,并整理了全套的**【一线互联网大厂Java核心面试题库+解析】:包括Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等**
最后
现在正是金三银四的春招高潮,前阵子小编一直在搭建自己的网站,并整理了全套的**【一线互联网大厂Java核心面试题库+解析】:包括Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等**
[外链图片转存中…(img-XPoUxWZQ-1718902343278)]