Bootstrap

LeetCode - Medium - 669

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

Analysis


使用带返回值的前后序混合递归模式。

个人感觉这题与LeetCode - Medium - 450. Delete Node in a BST性质类似

Submission


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;

}

}

Test


最后

现在正是金三银四的春招高潮,前阵子小编一直在搭建自己的网站,并整理了全套的**【一线互联网大厂Java核心面试题库+解析】:包括Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等**

image

最后

现在正是金三银四的春招高潮,前阵子小编一直在搭建自己的网站,并整理了全套的**【一线互联网大厂Java核心面试题库+解析】:包括Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等**

[外链图片转存中…(img-XPoUxWZQ-1718902343278)]

;