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

目录

669. 修剪二叉搜索树

前言

思路

递归法

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

前言

递归法

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

前言

递归法

总结


669. 修剪二叉搜索树

题目链接

文章链接

前言

         本题承接昨天二叉搜索树的插入和删除操作题目,要对整棵二叉搜索树进行遍历修剪。

思路

        因为要遍历整棵二叉搜索树,因此不需要返回值也可以,我们可以完成修剪的操作,但是有返回值更方便,可以通过递归函数的返回值来移除节点。

递归法

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:TreeNode* trimBST(TreeNode* root, int low, int high) {if (root == NULL) return NULL;if (root->val < low){//寻找右子树符合区间的节点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; }
};

        思路同前几题,依然是通过返回本次节点给上一层,上一层用左右孩子接住下一层的返回值。

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

题目链接

文章链接

前言

        题目强调得到的二叉搜索树必须平衡,因此不可以采用简单的线性结构构造二叉搜索树。要将有序数组的中值作为根节点,左侧作为左子树,右侧作为右子树。

递归法

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
private:TreeNode* traversal(vector<int>& nums, int left, int right){if (left > right) return NULL;int mid = left + (right - left) / 2;TreeNode* root = new TreeNode(nums[mid]);root->left = traversal(nums, left, mid - 1);root->right =  traversal(nums, mid + 1, right);return root;}
public:TreeNode* sortedArrayToBST(vector<int>& nums) {TreeNode* root = traversal(nums, 0, nums.size() - 1);return root;}
};

         在确定数组中值的时候以及递归时左右边界的确定,要严格根据遵守二分法,本题算法采用左闭右闭的区间形式。

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

题目链接

文章链接

前言

         将二叉搜索树转化为累加树本质上和数组逆序累加求和的思路一致,难点在于二叉树的遍历顺序。

递归法

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
private:int pre = 0; //记录前一个节点的数值void traversal(TreeNode* cur){if (cur == NULL) return;traversal(cur->right);cur->val += pre;pre = cur->val;traversal(cur->left);}
public:TreeNode* convertBST(TreeNode* root) {pre = 0;traversal(root);return root;}
};

        本题单层递归采用右中左的逆中序遍历顺序。

总结

        二叉树正式完结!后期要多回顾总结。

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

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

相关文章

Ubuntu16.04升级到18.04--检查更新时出现问题--解决方法

一开始装Ubuntu时装的是16.04&#xff0c;后来装cuda时&#xff0c;发现核是4.15的&#xff0c;需要升级到18.04&#xff0c;于是输入sudo do-release-upgrade更新时&#xff0c;发现错误&#xff1a; no module named DistUpgrade google后发现帖子&#xff1a; https://ask…

移动通信系统关键技术多址接入OFDM学习(7)

1.OFDM是一种多载波传输方案&#xff0c;可以将高速串行传输转换为低速并行传输&#xff0c;增加符号持续时间&#xff0c;抗多径干扰能力强。 串行和并行有着不同的比特持续时间&#xff0c;同时拥有相同的数据速率。因此&#xff0c;虽然OFDM将串行信号转换为并行信号&#…

HTTP基本概念

HTTP&#xff08;HyperText Transfer Protocol&#xff1a;超文本传输协议&#xff09;是一种用于分布式、协作式和超媒体信息系统的应用层协议。 简单来说就是一种发布和接收 HTML 页面的方法&#xff0c;被用于在 Web 浏览器和网站服务器之间传递信息。 HTTP 默认工作在 TCP…

【数据库原理】(23)实际应用中的查询优化方法

一.基于索引的优化 索引是数据库查询优化的关键工具之一。合理地使用索引可以显著提高查询速度&#xff0c;降低全表扫描的成本。以下是建立和使用索引的一些基本原则和最佳实践。 索引的建立与使用原则 数据量规模与查询频率: 值得建立索引的表通常具有较多的记录&#xff0…

linux防火墙查看状态firewall、iptable

1、iptables防火墙 查看防火墙状态 service iptables status 停止防火墙 service iptables stop 启动防火墙 service iptables start 重启防火墙 service iptables restart 永久关闭防火墙 chkconfig iptables off 永久关闭后重启 chkconfig iptables on 开启80端…

【天龙怀旧服】攻略day5

关键字&#xff1a; 天鉴扫荡、举贤、燕子水路 1】85天鉴任务可以扫荡 在流派选择npc那里&#xff0c;花费40交子即可扫荡100点&#xff0c;可以兑换10个灵武打造图&#xff1b; 此外打造图绑定不影响做出来的灵武绑定&#xff0c;只要对应的玉不绑灵武就不绑定 2】冠绝师门…

报错java.lang.IllegalArgumentException: MALFORMED

java.lang.IllegalArgumentException: MALFORMEDat java.util.zip.ZipCoder.toString(ZipCoder.java:58)at java.util.zip.ZipInputStream.readLOC(ZipInputStream.java:300)at java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:122)我是在解压压缩包文件的时候…

想要简化重复订单吗?不妨考虑一揽子采购订单

企业想提高采购流程效率&#xff0c;简化大批量采购是一个很好的开始。财务、会计和采购部门通过系统化订购大量物品&#xff08;如纸张、打印机墨水和墨粉、清洁用品、纸制品和其他易重复采购的消耗品&#xff09;可以节省时间和金钱。借助正确的采购订单&#xff08;PO&#…

android 重启

RescueParty 重启 Android之RescueParty机制 - 简书 01-10 16:39:15.421637 1268 1395 W RescueParty: Attempting rescue level RESET_SETTINGS_UNTRUSTED_DEFAULTS Line 90467: 01-10 16:39:15.422713 1268 1395 W RescueParty: Performing scoped reset for pack…

小程序基础学习(组件通信)

介绍 点击子组件的按钮&#xff0c;把点击事件发送给页面 例如&#xff1a;点击这个“最大的一头猪”&#xff0c;由组件内部设置点击事件然后在传递给页面。 实现原理 给组件内部需要点击的文本设置点击事件 在组件内部监听点击事件&#xff0c;并发送给页面点击事件的详细信…

一天一个设计模式---桥接模式

概念 桥接器模式是一种结构型设计模式&#xff0c;旨在将抽象部分与实现部分分离&#xff0c;使它们可以独立变化而不相互影响。桥接器模式通过创建一个桥接接口&#xff0c;连接抽象和实现&#xff0c;从而使两者可以独立演化。 具体内容 桥接器模式通常包括以下几个要素&a…

操作符之可选链和空值合并

可选链操作符 ?. 是 JavaScript 的 ECMAScript 2020 (ES11) 中引入的一项新特性。它的作用是在处理可能为 null 或 undefined 的对象属性或方法时&#xff0c;防止因为访问链中的某个属性或方法为 null 或 undefined 而导致的错误。可选链操作符的语法是 ?.。 让我们来看一个…

node运行 js报错 SyntaxError: Cannot use import statement outside a module

使用babel相关模块来进行转义支持&#xff0c;通过使用babel编译&#xff0c;使其转化为node.js的模块。 1、安装依赖 npm install --save babel-corenpm install --save babel-preset-env npm install babel-cli -g2、在根目录下创建 .babelrc文件。内容为&#xff1a; {&qu…

C# 学习笔记-001-继承

1&#xff0c;继承类型 继承的类型&#xff1a;实现继承和接口继承 实现继承&#xff1a; 表示一个类型派生于一个基类型&#xff0c;拥有改类型的所有成员字段和函数。 接口继承&#xff1a; 表示一个类型只继承了函数函数签名&#xff0c;没有继承任何实现代码。 2&#xff…

电调相关英文缩写ESC、BEC、PPM、Oneshot125、Oneshot42、Multishot、DShot、ProShot

ESC ESC全称是 Electronic Speed Control 中文翻译成电子调速器&#xff0c;就是电调 BEC BEC全称是 battey elimination circuit 中文翻译成免电池电路 可以理解就是对外供电&#xff0c;BEC就是线性稳压&#xff0c;降压用的&#xff0c;给接收机飞控供电 ESC协议 ESC协议…

Android14之解决Pixel手机联网出现感叹号(一百八十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

图解JVM (及一些垃圾回收\GC相关面试题 持续更新)

垃圾回收&#xff0c;顾名思义就是释放垃圾占用的空间&#xff0c;从而提升程序性能&#xff0c;防止内存泄露。当一个对象不再被需要时&#xff0c;该对象就需要被回收并释放空间。 Java 内存运行时数据区域包括程序计数器、虚拟机栈、本地方法栈、堆等区域。其中&#xff0c;…

牛客网BC93 公务员面试

描述&#xff1a; 公务员面试现场打分。有7位考官&#xff0c;从键盘输入若干组成绩&#xff0c;每组7个分数&#xff08;百分制&#xff09;&#xff0c;去掉一个最高分和一个最低分&#xff0c;输出每组的平均成绩。 输入描述&#xff1a; 每一行&#xff0c;输入7个整数&…

微信使用wx.getLocation

1&#xff0c;小程序管理后台 -「开发」-「开发管理」-「接口设置」” 中完成权限申请&#xff1b; 2&#xff0c;需在 app.json 中声明其需调用的地理位置相关接口 "permission": {"scope.userLocation": { "desc": "你的位置信息将用于小…

03-编码篇-x264编译与介绍

使用FFMPEG作编码操作时&#xff0c;会涉及到将yuv数据编码成h264数据&#xff0c;FFmpeg的libavcodec中的libx264.c会调用x264库的源码作编码&#xff1a; 1.x264库编译 下载X264&#xff0c;地址为&#xff1a;http://www.videolan.org/developers/x264.html&#xff0c;并解…