LeetCode669 修剪二叉搜索树

修剪二叉搜索树>>>

LeetCode669 修剪二叉搜索树_第1张图片

递归:抓住二叉搜索树特点,若当前节点比left大则只能从右子树中找,若当前节点比R小则只能从左子树中找;处理正常的节点root.left = trimBST(root.left, L, R); root.right = trimBST(root.right, L, R);

package FTree;

/**
 * @Author Zhou  jian
 * @Date 2020 ${month}  2020/4/14 0014  22:16
 * 修剪二叉搜索树
 * 给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。
 * 通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) 。
 * 你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。
 */
public class Problem669 {



    public TreeNode trimBST(TreeNode root, int L, int R) {

        if (root == null)
            return root;


        //修键一棵树,如果根节点的值小于给定的左边界L,那么当前节点及其左子树就会被修剪掉
        //修键后的树应该是其右子树,但是右子树不一定是符合范围的
        //下面两个if相当于删除不满足要求的节点
        if (root.val < L)
            //返回修剪过的右子树。抱有一丝丝期望,
            // 希望右子树能够满足要求,因为右子树的值大于当前根节点的值
            return trimBST(root.right, L, R);

        if (root.val > R)
            //返回修剪过的左子树,抱有一丝丝期望,
            // 希望左子树能够满足要求,因为左子树的值小于当前根节点的值
            return trimBST(root.left, L, R);

        //处理正常的节点
        root.left = trimBST(root.left, L, R);

        root.right = trimBST(root.right, L, R);


        return root;


    }


//    public  TreeNode  dfs(TreeNode root,TreeNode parent,int L,int R){
//
//        //假如为空节点
//        if(root==null) return root;
//
//
//        //先去找到头节点
//        if(parent==null){
//
//
//        }else{
//
//
//
//
//        }
//
//
//
//    }



}

你可能感兴趣的:(leetcode刷题笔记)