题目地址:
https://www.lintcode.com/problem/trim-a-binary-search-tree/description
给定一棵BST,再给定一个范围 ,要求将树中不在这个范围内的节点都删掉,返回删完后的树根。
可以用递归解决,代码如下:
public class Solution {
/**
* @param root: given BST
* @param minimum: the lower limit
* @param maximum: the upper limit
* @return: the root of the new tree
*/
public TreeNode trimBST(TreeNode root, int minimum, int maximum) {
// write your code here
// 如果是空树则直接返回
if (root == null) {
return root;
}
// 如果树根小于下界,那么树根以及整个左子树都要被砍掉,只需返回右子树trim之后的结果就行;
// 如果树根大于上界则也一样;否则分别将左右子树trim完接在树根上即可
if (root.val < minimum) {
return trimBST(root.right, minimum, maximum);
} else if (root.val > maximum) {
return trimBST(root.left, minimum, maximum);
} else {
root.left = trimBST(root.left, minimum, maximum);
root.right = trimBST(root.right, minimum, maximum);
return root;
}
}
}
class TreeNode {
int val;
TreeNode left, right;
TreeNode(int x) {
val = x;
}
}
时间复杂度 ,空间 。