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

目录

  • 一、力扣669.修剪二叉搜索树
    • 1.1 题目
    • 1.2 思路
    • 1.3 代码
  • 二、力扣108.将有序数组转换为二叉搜索树
    • 2.1 题目
    • 2.2 思路
    • 2.3 代码
    • 2.4 总结
  • 三、力扣538.把二叉搜索树转换为累加树
    • 3.1 题目
    • 3.2 思路
    • 3.3 代码
    • 3.4 总结

一、力扣669.修剪二叉搜索树

1.1 题目

在这里插入图片描述

1.2 思路

本题递归代码分三个模块来写:
(1)递归终止条件:null节点
(2)该节点为要删除节点的处理逻辑:继续向左或者向右递归,将有效的节点返回给上层节点
(3)该节点为不需要删除节点的处理逻辑:继续向左和又递归,将有效的节点返回给本节点作为左右孩子

1.3 代码

class Solution {public TreeNode trimBST(TreeNode root, int low, int high) {//判断特殊情况if(root == null){return null;}return traversal(root,low,high);}//递归public TreeNode traversal(TreeNode root,int low,int high){//递归终止条件if(root == null){return null;}//如果当前节点是需要被删除的节点if(root.val < low){return traversal(root.right,low,high);}if(root.val > high){return traversal(root.left,low,high);}//如果该节点符合条件,不需要被删除root.left = traversal(root.left,low,high);root.right = traversal(root.right,low,high);return root;}
}

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

2.1 题目

在这里插入图片描述

2.2 思路

注意是平衡二叉搜索树;
选取二叉树的中间节点(数组的中间数),根据数组的左右区间来构造二叉树的左右子树。

2.3 代码

lass Solution {public TreeNode sortedArrayToBST(int[] nums) {if(nums.length == 0){return null;}return traversal(nums,0,nums.length-1);}//递归,划分区间构造左右子树(坚持区间左闭右闭原则)public TreeNode traversal(int[] nums,int left,int right){//递归终止条件if(left > right){return null;}int mid = left +((right-left)>>1);//注意使用移位运算符要加括号TreeNode root = new TreeNode(nums[mid]);root.left = traversal(nums,left,mid-1);root.right = traversal(nums,mid+1,right);return root;}
}

2.4 总结

构造二叉树:有序数组选取中间节点,然后递归划分左右区间构造左右子树。
注意使用移位运算符要加括号。

三、力扣538.把二叉搜索树转换为累加树

3.1 题目

在这里插入图片描述

3.2 思路

我的思路:先将二叉树中序遍历一遍,将值记录再数组中;
第二次中序遍历时直接累加赋值(设置一个起始索引,置为0,每遍历一个节点就起始索引加一,直到遍历结束)
代码随想录:右中左

3.3 代码

我的思路:(跑出来是错的)

class Solution {public List<Integer> res = new ArrayList<>();public int quitIndex = -1; public TreeNode convertBST(TreeNode root) {if(root == null){return null;}//第一次中序遍历,从小到大拿到所有节点的值traversal(root);//第二次遍历,为节点重新赋值int sum = 0;for(int i =0;i<res.size();i++){sum += res.get(i);}traversal2(root,sum);return root;}public void traversal(TreeNode root){if(root == null){return;}//左中右traversal(root.left);res.add(root.val);traversal(root.right);}public void traversal2(TreeNode root,int sum){if(root == null){return;}//左中右traversal2(root.left,sum);if(quitIndex != -1){sum -= res.get(quitIndex);root.val = sum;quitIndex++;}else{root.val = sum;quitIndex++;}traversal2(root.right,sum);}
}

右中左(相当于从大到小遍历):

class Solution {public int beforeSum = 0;public TreeNode convertBST(TreeNode root) {//右中左递归遍历(按值从大到小)if(root == null){return null;}traversal(root);return root;}public void traversal(TreeNode root){if(root == null){return;}traversal(root.right);//中:更新本节点的值beforeSum += root.val;root.val = beforeSum;traversal(root.left);}
}

3.4 总结

还是要利用好二叉搜索树的有序特性!

二叉树总结参考代码随想录:https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E6%80%BB%E7%BB%93%E7%AF%87.html#%E6%9C%80%E5%90%8E%E6%80%BB%E7%BB%93
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day14_用户前台项目环境搭建(首页接口开发,分类接口开发,网关服务搭建,Redis缓存,Spring Cache)

文章目录 1 尚品甄选H5介绍1.1 业务功能介绍1.2 系统架构1.3 前端H5开发说明 2 搭建项目环境2.1 项目结构说明2.2 模块依赖说明2.3 环境说明2.4 项目模块创建2.4.1 spzx-parent2.4.2 spzx-service2.4.43 service-product 2.5 导入接口文档 3 首页接口开发3.1 需求分析3.3 接口开…

理解JavaScript中的WeakSet和WeakMap

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Yolov8-pose关键点检测:特征融合涨点篇 | 广义高效层聚合网络(GELAN) | YOLOv9

💡💡💡本文独家改进:即结合用梯度路径规划(CSPNet)和(ELAN)设计了一种广义的高效层聚合网络(GELAN),高效结合YOLOv8-pose,实现涨点。 将GELAN添加在backbone和head处,提供多个yaml改进方法 Yolov8-Pose关键点检测专栏介绍:https://blog.csdn.net/m0_6377421…

SSRF服务器请求伪造原理和pikachu靶场实验

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性&#xff0c;仅供安全研究与学习之用&#xff0c;读者将信息做其他用途&#xff0c;由Ta承担全部法律及连带责任&#xff0c;文章作者不承担任何法律及连带责任。 1、SSRF简介 SSRF全称&#xff1a;Server-Side Request…

017集——圆弧(ARC)转多段线(lwpolyline)——cad vba 中按一定精度拟合加点实现

在国土资源管理项目中&#xff0c;我们经常会遇到CAD转gis数据实现入库&#xff0c;而cad中的arc圆弧转为gis数据只能转出弧的顶点坐标&#xff0c;导致图形变形失真。若一个一个对弧进行手工增加点转为多段线&#xff0c;耗时耗力&#xff0c;效率极其低下。这里给出解决方案&…

继承杂谈。

内容一览 前言继承的概念及定义继承的意义继承关系及访问限定符父类和子类对象之间的转化继承后的作用域继承与有元继承与静态成员多继承继承和组合的区别&#xff1a;继承的总结和反思 前言 面向对象的三大特性&#xff1a;封装继承和多态&#xff0c;这三种特性优者很紧密地联…

【Prometheus】PromQL

数据类型 即时向量&#xff08;instant vector&#xff09; node_cpu_seconds_total{instance"ahoj-dev-ubuntu-virtualbox",mode"idle"} 区间向量&#xff08;range vector&#xff09; node_cpu_seconds_total{instance"ahoj-dev-ubuntu-virtu…

手拉手RocketMQ基础

消息中间件的对比 消息中间件 ActiveMQ RabbitMQ RocketMQ kafka 开发语言 java erlang java scala 单击吞吐量 万级 万级 10万级 10万级 时效性 ms us ms ms 可用性 高(主从架构) 高(主从架构) 非常高(主从架构) 非常高(主从架构) 消息中间件: activ…

云上攻防-云产品篇堡垒机场景JumpServer绿盟SASTeleport麒麟齐治

知识点 1、云产品-堡垒机-产品介绍&攻击事件 2、云产品-堡垒机-安全漏洞&影响产品 章节点&#xff1a; 云场景攻防&#xff1a;公有云&#xff0c;私有云&#xff0c;混合云&#xff0c;虚拟化集群&#xff0c;云桌面等 云厂商攻防&#xff1a;阿里云&#xff0c;腾讯…

CSS拖曳盒子案例

让我为大家带来一个小案例吧&#xff01; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>* {margin: 0;padding: 0;}.box1 {width: 100px;height: 100px;background-color: black;margin-bot…

iMazing3 2024详细解析数据备份与恢复备份

iMazing 3的备份功能支持增量备份&#xff08;类似苹果电脑里的Time Machine功能&#xff09;&#xff0c;意思是第一次把移动设备的数据全部备份下来&#xff0c;之后的备份就只针对数据有变化的那部分&#xff0c;这样可以节省大量的时间和存储空间&#xff0c;不会让使用者为…

LeetCode59:螺旋矩阵Ⅱ

题目描述 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[[1,2,3],[8,9,4],[7,6,5]] 代码 class Solution { public:vector…

00-ESP-IDF 环境配置指南

ESP-IDF 环境配置指南 ESP-IDF安装 1.首先我们在浏览器搜索esp-idf&#xff0c;点击第一个选项 2.点击右边栏的安装 3.我们选择手动安装选择需要的系统版本 4.点击链接 5.这里我们选择一个版本&#xff0c;建议不要选择最新的&#xff0c;安装出现问题在网上不好找到解决办…

蓝桥杯备战刷题-滑动窗口

今天给大家带来的是滑动窗口的类型题&#xff0c;都是十分经典的。 1&#xff0c;无重复字符的最长子串 看例三&#xff0c;我们顺便来说一下子串和子序列的含义 子串是从字符串里面抽出来的一部分&#xff0c;不可以有间隔&#xff0c;顺序也不能打乱。 子序列也是从字符串里…

Vue+SpringBoot打造个人健康管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 健康档案模块2.2 体检档案模块2.3 健康咨询模块 三、系统展示四、核心代码4.1 查询健康档案4.2 新增健康档案4.3 查询体检档案4.4 新增体检档案4.5 新增健康咨询 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpri…

【周总结周末日常】

周总结 完成任务开发并且与前端联调通过 完成已开发功能的冒烟测试 修复测试中出现的一些数据显示问题 2024/3/10 晴 温度适宜 这周天气比上周好多了&#xff0c;最起码见到好几次太阳 周六在世纪公园溜达一会儿&#xff0c;偶尔呼吸下大自然&#xff0c;挺棒的…

【QT】创建第一个QT程序

下面的前7个可以先不看&#xff0c;直接从8开始看 1. 创建Qt程序 一个Qt程序的组成部分&#xff1a;应用程序类&#xff0c;窗口类应用程序类个数&#xff1a;有且只有一个QApplication a;如何查看类对应的模块&#xff1a;光标移动到类上&#xff0c;F1qmake模块的名字 2. …

【设计模式】(四)设计模式之工厂模式

1. 工厂模式介绍 工厂模式&#xff08;Factory Pattern&#xff09;是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。 工厂模式有三种实现方式&#xff1a; 简单工厂模式工厂方法模式抽象工厂模式 2. 工厂方…

前后端分离项目,如何解决跨域问题?

跨域问题是前后端分离项目中非常常见的一个问题&#xff0c;举例来说&#xff0c;编程猫学习网站的前端服务跑在 8080 端口下&#xff0c;后端服务跑在 9002 端口下&#xff0c;那么前端在请求后端接口的时候就会出现跨域问题。 403 Forbidden 是HTTP协议中的一个状态码&#x…

华容道问题求解_详细设计(五)之hash值和回放功能

&#xff08;续上文&#xff09; 布局的hash 值计算 笔者也参考了之前的一些文章&#xff0c;很多文章提到了怎么节省存贮空间来查找最优解&#xff0c;这不是笔者的目的。笔者的目的比较单一&#xff0c;就是找到最优解就行了。因此并没有在存贮上面进行过多的优化&#xff…