代码随想录算法训练营第二十三天|669. 修剪二叉搜索树、 108.将有序数组转换为二叉搜索树、 538.把二叉搜索树转换为累加树

669. 修剪二叉搜索树

在这里插入图片描述

题目链接:669. 修剪二叉搜索树
文档讲解:代码随想录
状态:还可以

思路:
如果节点的值在[low, high]之间,则递归修剪它的左子树和右子树。
节点值小于low:如果节点的值小于low,则修剪后的树不会包含这个节点及其左子树,直接返回修剪后的右子树。
节点值大于high:如果节点的值大于high,则修剪后的树不会包含这个节点及其右子树,直接返回修剪后的左子树。

题解:

public TreeNode trimBST(TreeNode root, int low, int high) {
    // 如果当前节点为空,返回null
    if (root == null) {
        return null;
    }
    // 如果当前节点的值在[low, high]之间
    if (root.val <= high && root.val >= low) {
        // 修剪左子树并将其连接到当前节点的左子树
        root.left = trimBST(root.left, low, high);
        // 修剪右子树并将其连接到当前节点的右子树
        root.right = trimBST(root.right, low, high);
    } else if (root.val < low) {
        // 如果当前节点的值小于low,则修剪后的树不包括当前节点及其左子树,直接返回右子树
        return trimBST(root.right, low, high);
    } else {
        // 如果当前节点的值大于high,则修剪后的树不包括当前节点及其右子树,直接返回左子树
        return trimBST(root.left, low, high);
    }
    // 返回当前节点
    return root;
}

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

在这里插入图片描述

题目链接:108. 将有序数组转换为二叉搜索树
文档讲解:代码随想录
状态:还行

思路:找到数组的中间元素,将其作为当前子树的根节点。递归地对数组的左半部分构建左子树。递归地对数组的右半部分构建右子树。

public TreeNode sortedArrayToBST(int[] nums) {
    // 调用辅助函数getBST来构建BST
    return getBST(nums, 0, nums.length - 1);
}

public TreeNode getBST(int[] nums, int start, int end) {
    // 基本情况:如果start大于end,返回null
    if (start > end) {
        return null;
    }
    // 计算中间索引
    int mid = start + (end - start) / 2;
    // 创建根节点
    TreeNode node = new TreeNode(nums[mid]);
    // 递归构建左子树
    node.left = getBST(nums, start, mid - 1);
    // 递归构建右子树
    node.right = getBST(nums, mid + 1, end);
    // 返回根节点
    return node;
}

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

在这里插入图片描述

题目链接:538. 把二叉搜索树转换为累加树
文档讲解:代码随想录
状态:还行

思路:通过观察,可以发现是一个右-中-左遍历的顺序,因此可以从大到小遍历节点,并累加节点值。

题解:

int sum = 0;

public TreeNode convertBST(TreeNode root) {
    if (root == null) {
        return null;
    }
    // 递归处理右子树
    TreeNode node = new TreeNode();
    node.right = convertBST(root.right);
    
    // 更新累加和并更新当前节点的值
    sum += root.val;
    node.val = sum;
    
    // 递归处理左子树
    node.left = convertBST(root.left);
    
    return node;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/707736.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】简答

1.什么是机器学习&#xff1f; 机器学习致力于研究如何通过计算的手段&#xff0c;利用经验来改善系统自身的性能。“训练”与“预测”是机器学习的两个过程&#xff0c;“模型”则是过程的中间输出结果&#xff0c;“训练”产生“模型”&#xff0c;“模型”指导 “预测”。计…

数字经济红利惠及全民,从掏钱消费到赚钱消费的转变,你准备好了吗?

伴随科技飞速发展&#xff0c;我们迎来了一个全新的经济时代——数字经济。数字经济以其独特的魅力&#xff0c;正为我们每个人带来前所未有的红利。 那么&#xff0c;面对数字经济的红利&#xff0c;我们是否已经做好了准备&#xff1f;我们又该如何把握这个时代赋予我们的机…

内存卡提示需要格式化?别急,这样拯救你的数据

一、内存卡突然提示需要格式化 在日常生活中&#xff0c;我们经常会使用到内存卡来存储照片、视频、文档等重要数据。然而&#xff0c;有时当我们试图访问内存卡时&#xff0c;却会遭遇一个令人头疼的问题——系统突然提示“内存卡需要格式化”。这意味着我们无法直接读取或写…

不愧是字节,图像算法面试真细致

这本面试宝典是一份专为大四、研三春招和研二暑假实习生准备的珍贵资料。 涵盖了图像算法领域的核心知识和常见面试题&#xff0c;包括卷积神经网络、实例分割算法、目标检测、图像处理等多个方面。不论你是初学者还是有经验的老手&#xff0c;都能从中找到实用的内容。 通过…

自动控制理论---零点和极点、单位脉冲响应

1、实验设备 PC计算机1台&#xff0c;MATLAB软件1套。 2、实验目的 研究四个具有相同极点分布但不同零点分布的二阶系统对单位脉冲响应的影响。绘制各系统的零点和极点分布图。计算并绘制各系统的单位脉冲响应波形。分析零点分布对单位脉冲响应的影响。 3、实验原理说明&am…

vue3和ant-design 实现前端多种验证密码规则,最全的前端验证密码规则

1、小眼睛可以显示/隐藏明文密码&#xff08;无法用input typepassword&#xff0c;用css样式实现切换明文&#xff09; 2、输入长度统计&#xff08;不是自带的&#xff0c;用div写的&#xff0c;然后定位到框内的&#xff09; 3、每输入一个字符分别验证每一项规则&#xf…

Talk|CVPR‘24 Oral:超越3D - Point Transformer V3中的多模态特征提取新构想

本期为TechBeat人工智能社区第599期线上Talk。 北京时间6月12日(周三)20:00&#xff0c;香港大学博士生—吴虓杨的Talk已经准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “超越3D - Point Transformer V3中的多模态特征提取新构想”&#xff0c;他通过P…

【React】Lodash---groupBy() 分组

例子 _.groupBy([6.1, 4.2, 6.3], Math.floor); // > { 4: [4.2], 6: [6.1, 6.3] }// The _.property iteratee shorthand. _.groupBy([one, two, three], length); // > { 3: [one, two], 5: [three] }思路分析 来源 定义一个名为groupBy的方法&#xff0c;通过扩展Ar…

同三维TT806-1 USB单路网络视频流/U盘采集卡

同三维TT806-1 USB单路网络视频流/U盘采集卡 (1路网络音视频信号或U盘直播推流器) 支持采集1路网络视频流或U盘音视频信号&#xff0c;USB输出到电脑 同时还可流推2个直播平台&#xff0c;可设置6组定时推流&#xff0c;有线网络 可录像到U盘&#xff0c;支持定时录像 一…

期末测试2--函数题---指针链表如何输出?

总结写代码时候遇到的问题 1.遍历指针链表 指针head在做for循环遍历的时候 for&#xff08;head, head!NULL;head&#xff09; head不能 for(head,head!NULL;headhead->next)-------正确的写法 int i; for(ihead;head!NULL;headhead->next) i 是 int 类型的&#x…

【思维导图工具】Xmind 2024安装教程+软件安装包下载

​XMind 2022是一款风靡全宇宙的思维导图和头脑暴炸软件&#xff0c;是全宇宙领先的“可视化思考”工具&#xff0c;每一个功能都能帮助你激发灵感、提高创造力。 XMind 2022为不同的使用场景提供多种可视化布局&#xff0c;让你的思维可以更清晰的结构化呈现&#xff0c;该软件…

【Linux】基础指令(一)

一、ls指令 语法&#xff1a; ls [选项][目录或文件] 功能&#xff1a;对于目录&#xff0c;该命令列出该目录下的所有子目录与文件。对于文件&#xff0c;将列出文件名以及其他信息 常见选项&#xff1a; -a 列出目录下的所有文件&#xff0c;包括以 . 开头的隐含文件。 -d …

WinForm之TCP客户端通讯

目录 一 设计界面 二 后台代码 一 设计界面 二 后台代码 using System.Net.Sockets; using System.Text;namespace TCP网络客户端通讯 {public partial class Form1 : Form{public Form1(){InitializeComponent();}TcpClient tcpClient new TcpClient();private void conne…

【STM32进阶笔记】GPIO端口

前段时间由于其他原因&#xff0c;专栏暂停更新了较长一段时间&#xff0c;现在恢复更新&#xff0c;争取继续为大家创造有价值的内容&#xff0c;期待大家的订阅关注&#xff0c;欢迎互相学习交流。 在STM32速成笔记系列专栏中其实已经对GPIO的一些必要知识进行了介绍&#xf…

springboot项目中使用 @Lazy 注解懒加载解决循环依赖问题,以及 @Lazy 标注顺序

场景&#xff1a; Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name taskServiceImpl: Bean with name taskServiceImpl has been injected into other beans [groupServiceImpl] in its raw version as part…

Rust 实战丨绘制曼德博集

曼德博集 曼德博集其实是一个“没什么用”的发现。 曼德博集&#xff08;Mandelbrot Set&#xff09;是一种在复平面上形成独特且复杂图案的点的集合。这个集合是以数学家本华曼德博&#xff08;Benoit Mandelbrot&#xff09;的名字命名的&#xff0c;他在研究复杂结构和混沌…

C#|Maui|BootstrapBlazor|Bootstrap Blazor 组件库改模板 | Bootstrap Blazor 组件库改布局,该怎么改?

先copy一个项目下来&#xff1a;Bootstrap Blazor 组件库 一套基于 Bootstrap 和 Blazor 的企业级组件库 发现不是很满足我的需求&#xff0c;我要把右下角的admin移动到左边去&#xff0c;该怎么移动&#xff1f; 先改代码 点进去到Layout.razor 文档&#xff0c;改成如下&am…

CS5518芯片设计|替代GM8775设计方案|MIPI转LVDS芯片方案|DSI转LVDS芯片方案

CS5518支持常见的1920*1080分辨率的屏&#xff0c;支持视频格式为 FULL HD&#xff08;1920 x 1200&#xff09;。为MIPI DSI 转LVDS 双通道桥接芯片&#xff0c;实现将MIPI DSI信号转换为单/双通道 LVDS输出功能&#xff0c;MIPI 支持1/2/3/4 通道可选,支持 4Gbps 速率。LVDS …

探索新升级!在 ART-Pi Smart 体验 RT-Thread Smart v5.1.0

1.引言 RT-Thread Smart v5.1.0 已经正式发布。这一版本在内核和功能上做了大量的改进与增强。我们可以在ART-Pi Smart开发板尽情探索这一新版更完善更强大的RT-Thread Smart操作系统。ART-Pi Smart开发板搭载了米尔科技的i.MX6ULL核心板&#xff0c;硬件设计和制作由韦东山团队…

一文搞定Django学习

文章目录 一、Django项目1.安装django2.创建项目3.文件描述4.创建app5.测试 二、操作数据库1.安装mysqlclient2.setting.py文件中设置连接信息3.创建表操作&#xff08;1&#xff09;python manage.py makemigrations&#xff08;2&#xff09;python manage.py migrate 4.增删…