当前位置: 首页 > article >正文

代码随想录day20 | leetcode 669.修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树

修剪二叉搜索树

以下是修剪二叉搜索树的步骤:

  1. 如果当前节点为空,直接返回空。
  2. 如果当前节点的值小于L,那么它和它的左子树都不在范围内,应该修剪掉。因此,返回修剪其右子树的结果,右子树中可能含有符合条件的结果,对其修剪。
  3. 如果当前节点的值大于R,那么它和它的右子树都不在范围内,应该修剪掉。因此,返回修剪其左子树的结果。
  4. 如果当前节点的值在LR之间,那么保留当前节点,并递归修剪其左右子树。
public TreeNode trimBST(TreeNode root, int low, int high) {
        if (root == null){
            return null;
        }
        if (root.val<low){
            TreeNode node = trimBST(root.right,low,high);//修剪左孩子的右子树
            return node;
        }
        if (root.val>high){
            TreeNode node = trimBST(root.left,low,high);
            return node;
        }
        root.left = trimBST(root.left,low,high);
        root.right = trimBST(root.right,low,high);
        return root;


    }

将有序数组转换为二叉搜索树

题目:给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。
构造二叉树:为了保证平衡,使左区间的节点数与右区间的节点数相同,从中间选取根节点,切割数组使用左闭右闭,递归重复步骤。

 public TreeNode sortedArrayToBST(int[] nums) {
        TreeNode root = PF(nums,0,nums.length-1);
        return root;
    }


    public TreeNode PF(int[] nums,int left, int right){
        TreeNode root;
        if (left> right){//当left = right 时数组中只有一个元素,也需要做处理。
            return null;
        }
        int mid = (left + right)/2;
        root = new TreeNode(nums[mid]);
        root.left = PF(nums,left,mid-1);
        root.right = PF(nums,mid+1,right);
        return root;
    }

把二叉搜索树转换为累加树

中序遍历:从小到大。累加,从大到小。
从树中可以看出累加的顺序是右中左,所以我们需要反中序遍历这个二叉树,然后顺序累加就可以了

int per = 0;//如果 per 是局部变量,那么它在每次调用时都会被重置,这样就无法实现累加的效果。
    public TreeNode convertBST(TreeNode root) {
          dft(root);
        return root;
    }
    public void dft(TreeNode root){
       
        if (root==null){
            return;
        }
        dft(root.right);
        per += root.val;
        root.val = per;
        dft(root.left);
    }

http://www.kler.cn/a/466477.html

相关文章:

  • ansible-性能优化
  • 如何利用人工智能算法优化知识分类和标签?
  • windows中硬件加速gpu计划开启cpu的使用率居高不下
  • 【shell编程】报错信息:Non-zero Exit Status(包含7种解决方法)
  • 图像分割基础:使用Python和scikit-image库
  • weblogic安装 12.2.1.4.0集群
  • Linux上安装配置单节点zookeeper
  • 容器化部署算法服务技术文档
  • SELECT的使用
  • 预测facebook签到位置
  • JavaSE——IO流(下)
  • 设置开机自启动的应用
  • leetcode(hot100)3
  • MTK 平台关于WIFI 6E P2P的解说
  • 37. 数组二叉树
  • NanoEdge AI Studio入门
  • React-Router 一站式攻略:从入门到精通,掌握路由搭建与权限管控
  • QT------------其他工具软件和技术
  • pcl源码分析之计算凸包
  • 设计模式之访问者模式:一楼千面 各有玄机
  • 养老院小程序怎么搭建?让老年人老有所养,老有所依!
  • 数据挖掘——关联规则挖掘
  • 如何进一步提高Oracle lgwr的写性能?
  • R机器学习:神经网络算法的理解与实操,实例解析
  • eplan如何导出可跳转的PDF
  • 【Rust练习】26.Package and Crate