代码随想录算法刷题训练营day23

代码随想录算法刷题训练营day23:LeetCode(669)修剪二叉搜索树、LeetCode(108)将有序数组转换为二叉搜索树、LeetCode(538)把二叉树转化为累加树

LeetCode(669)修剪二叉搜索树
题目

代码

java 复制代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode trimBST(TreeNode root, int low, int high) {
        //注意是二叉搜索树,一定要按二叉搜索树的规则来做
        //采用先序递归的方法来做
        //判断终止条件-----返回为null
        if(root==null){
            return null;
        }
        //判断树的节点是否在区间里面,若树的节点不在区间则进行删除-----根节点被删除的情况,判断左右子树的保留情况
        if(root.val<low){//仅会出现一种情况
            //那么此时这颗以root为根树的左子树一定不保留,右子树可能保留,也可能不保留,需要对右子树进行判断
            TreeNode right=trimBST(root.right, low, high);
            return right;//此时直接将右子树判断的结果返回----直接返回,后面能接住
        }
        if(root.val>high){//进入之后直接把左节点返回回去了,相当于把节点直接删除了
            //那么此时这颗树的右子树一定不保留,左子树可能保留,需要对左子树进行判断
            TreeNode left=trimBST(root.left, low, high);
            return left;
        }
        //递归程序开始,采用先序遍历,采用根左右的方法
        root.left=trimBST(root.left, low, high);//左边树处理后返回根节点
        root.right=trimBST(root.right, low, high);//右边树处理后返回根节点
        return root;

    }
}

LeetCode(108)将有序数组转换为二叉搜索树
题目

代码

java 复制代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        //构造平衡二叉树-------思路,主要是切割区间----注意切割区间的终止条件
        //定义一个新的构建二叉树的方法,用于构建新的二叉树
        int left=0;//定义左参数,左区间
        int right=nums.length-1;
        TreeNode root=buildTreeNode(nums,left,right);
        return root;
    }
    //定义构建平衡二叉树的方法
    public TreeNode buildTreeNode(int[] nums,int left,int right){
        //采用左闭右闭的方法
        //判断终止条件-----即为构建不了二叉树的方法
        if(left>right){
            return null;
        }
        //单次递归的执行策略
        int mid=(left+right)/2;
        TreeNode root=new TreeNode(nums[mid]);
        //递归----先序遍历---根左右
        root.left=buildTreeNode(nums, left, mid-1);//左子树
        root.right=buildTreeNode(nums, mid+1, right);//右子树
        return root;
    }
}

LeetCode(538)把二叉树转化为累加树
题目

代码

java 复制代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    int pre=0;
    public TreeNode convertBST(TreeNode root) {
        //回顾一下数组的操作方法,双指针
        //本题主要是更新节点的值
        updateTreeNodeVal(root);//将树的根节点传入进去
        //更新完成之后返回root
        return root;
    }
    public void updateTreeNodeVal(TreeNode root){
        //终止条件
        if(root==null){
            return;
        }
       
        updateTreeNodeVal(root.right);
        //中间节点的处理逻辑
        //此时到了最后一个节点值
        root.val=root.val+pre;//此时记录的是当前节点值
        pre=root.val;//要理解清楚,不要绕进去
        //第一个更新的是最右边-根-左
        updateTreeNodeVal(root.left);
    }
}
相关推荐
图灵学术计算机论文辅导13 分钟前
论文推荐|迁移学习+多模态特征融合
论文阅读·人工智能·深度学习·计算机网络·算法·计算机视觉·目标跟踪
一百天成为python专家22 分钟前
Python循环语句 从入门到精通
开发语言·人工智能·python·opencv·支持向量机·计算机视觉
Sunhen_Qiletian25 分钟前
朝花夕拾(五)--------Python 中函数、库及接口的详解
开发语言·python
hqwest34 分钟前
C#WPF实战出真汁07--【系统设置】--菜品类型设置
开发语言·c#·wpf·grid设计·stackpanel布局
threejs源码翻译官43 分钟前
显微镜图像处理【优化】- 使用图像风格迁移技术放大图像细节
算法
前路不黑暗@1 小时前
C语言:操作符详解(二)
c语言·开发语言·经验分享·笔记·学习·学习方法·visual studio
柳贯一(逆流河版)1 小时前
Spring 三级缓存:破解循环依赖的底层密码
java·spring·缓存·bean的循环依赖
强德亨上校1 小时前
贪心算法(Greedy Algorithm)详解
算法·贪心算法
深盾科技2 小时前
Kotlin Data Classes 快速上手
android·开发语言·kotlin
zzywxc7872 小时前
详细探讨AI在金融、医疗、教育和制造业四大领域的具体落地案例,并通过代码、流程图、Prompt示例和图表等方式展示这些应用的实际效果。
开发语言·javascript·人工智能·深度学习·金融·prompt·流程图