669. 修剪二叉搜索树(leetcode)

https://leetcode.cn/problems/trim-a-binary-search-tree/description/

要点是区分在区间左边还是右边,在区间左边那么右子树也还有必要去查找删除,右边同理,返回的是删除后新树的根节点

要注意函数要实现单层逻辑和完成闭环语义

class Solution {

    // 查找要删除的节点,进行删除,返回删除节点后新的树的根节点
    public TreeNode trimBST(TreeNode root, int low, int high) {
        // 1.找不到要删除的节点,也顺便删除上一层递归要删除的节点
        if(root==null)return null;
        // 2.节点在边界左边,直接删除此节点,因为左子树都小于根节点,因此尝试查找右子树,返回新树根节点
        if(root.val < low)
        {
            // 搜索右子树
            return trimBST(root.right,low,high);
        }
        // 3.节点在边界右边,直接删除此节点,右子树都大于根节点,因此尝试左子树,返回新树根节点
        if(root.val > high)
        {
            // 搜索左子树
            return trimBST(root.left,low,high);
        }
        // 赋值新树的根节点
        root.left=trimBST(root.left,low,high);
        root.right=trimBST(root.right,low,high);
        return root;
    }

}

 

posted @ 2024-05-11 14:03  风乐  阅读(3)  评论(0编辑  收藏  举报