【Lintcode】701. Trim a Binary Search Tree

题目地址:

https://www.lintcode.com/problem/trim-a-binary-search-tree/description

给定一棵BST,再给定一个范围 [ m i n , m a x ] [min, max] ,要求将树中不在这个范围内的节点都删掉,返回删完后的树根。

可以用递归解决,代码如下:

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;
    }
}

时间复杂度 O ( n ) O(n) ,空间 O ( h ) O(h)

发布了387 篇原创文章 · 获赞 0 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_46105170/article/details/105450292