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

【代码随想录二刷】Day23-二叉树-C++

代码随想录二刷Day23

今日任务

669.修剪二叉搜索树
108.将有序数组转换为二叉搜索树
538.把二叉搜索树转换为累加树
语言:C++

669. 修剪二叉搜索树

链接:https://leetcode.cn/problems/trim-a-binary-search-tree/
递归

class Solution {
public:TreeNode* trimBST(TreeNode* root, int low, int high) {if(root == NULL) return NULL;if(root->val < low) return trimBST(root->right, low, high);if(root->val > high) return trimBST(root->left, low, high);root->left = trimBST(root->left, low, high);root->right = trimBST(root->right, low, high);return root;}
};

迭代

class Solution {
public:TreeNode* trimBST(TreeNode* root, int low, int high) {if(root == NULL) return NULL;while(root && (root->val < low || root->val > high)){if(root->val < low) root = root->right; //左边没必要修建了,都不符合条件else root = root->left;}//当前root的值肯定是位于[low,high]中的TreeNode* cur = root;while(cur){//左侧的值是更小的,直接剪掉while(cur->left && cur->left->val < low){cur->left = cur->left->right;}cur = cur->left;}cur = root;while(cur){//右侧的值是更大的,直接剪掉while(cur->right && cur->right->val > high){cur->right = cur->right->left;}cur = cur->right;}return root;}
};

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

链接:https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/
递归

class Solution {
public:TreeNode* traversal(vector<int>& nums, int left, int right){if(left > right) return NULL;if(left == right) return new TreeNode(nums[left]);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;}TreeNode* sortedArrayToBST(vector<int>& nums) {if(nums.size() == 1) return new TreeNode(nums[0]);return traversal(nums, 0, nums.size() - 1);}
};

迭代

class Solution {
public:TreeNode* sortedArrayToBST(vector<int>& nums) {queue<TreeNode*> nodeQue;queue<int> leftQue;queue<int> rightQue;TreeNode* root = new TreeNode(0);nodeQue.push(root);leftQue.push(0);rightQue.push(nums.size() - 1);while(!nodeQue.empty()){int left = leftQue.front(); leftQue.pop();int right = rightQue.front(); rightQue.pop();int mid = left + ((right - left) >> 1);TreeNode* cur = nodeQue.front(); nodeQue.pop();cur->val = nums[mid];if(left <= mid - 1){cur->left = new TreeNode(0);nodeQue.push(cur->left);leftQue.push(left);rightQue.push(mid - 1);}if(mid + 1 <= right){cur->right = new TreeNode(0);nodeQue.push(cur->right);leftQue.push(mid + 1);rightQue.push(right);}}return root;}
};

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

链接:https://leetcode.cn/problems/convert-bst-to-greater-tree/
递归

class Solution {
public:int sum = 0;int curSum = 0;void getSum(TreeNode* root){if(root == NULL) return;getSum(root->left);sum += root->val;getSum(root->right);}void traversal(TreeNode* root){if(root == NULL) return;traversal(root->left);int tmp = root->val;root->val = sum - curSum;curSum += tmp;traversal(root->right); }TreeNode* convertBST(TreeNode* root) {if(root == NULL) return root;getSum(root);traversal(root);return root;}
};

没有必要中序遍历,按照右中左遍历即可

class Solution {
public:int pre = 0;void traversal(TreeNode* root){if(root == NULL) return;traversal(root->right);root->val += pre;pre = root->val;traversal(root->left);}TreeNode* convertBST(TreeNode* root) {traversal(root);return root;}
};

迭代

class Solution {
public:TreeNode* convertBST(TreeNode* root) {if(root == NULL) return root;int pre = 0;stack<TreeNode*> st;TreeNode* cur = root;//中序遍历反过来 while(!st.empty() || cur){if(cur){st.push(cur); //rootcur = cur->right;}else{cur = st.top();st.pop();cur->val += pre;pre = cur->val;cur = cur->left;}}return root;}
};

相关文章:

【代码随想录二刷】Day23-二叉树-C++

代码随想录二刷Day23 今日任务 669.修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树 语言&#xff1a;C 669. 修剪二叉搜索树 链接&#xff1a;https://leetcode.cn/problems/trim-a-binary-search-tree/ 递归 class Solution { public:Tree…...

Linux GPIO 开发指南

文章目录Linux GPIO 开发指南1 概述1.1 编写目的1.2 适用范围1.3 相关人员2 模块介绍2.1 模块功能介绍2.2 相关术语介绍2.3 总体框架2.4 state/pinmux/pinconfig2.5 源码结构介绍3 模块配置3.1 kernel menuconfig 配置3.2 device tree 源码结构和路径3.2.1 device tree 对 gpio…...

记一次后端生成Zip文件通过浏览器下载后文件损坏,无法打开,不可预知的末端错误,下载后文件比源文件增大

记一次后端生成Zip文件问题前言问题出现排查一、流没有关好二、写入了空白字节三、没有flush定位环节一、生成二、通过SwaggerUI、PostMan进行下载三、结论解决方法前言 在项目上线前夕&#xff0c;临时添加了个数据导出的接口&#xff0c;需求是导出压缩包&#xff0c;选择了项…...

python中savgol_filter的详细解释

目录savgol_filter简介savgol_filter原理参数window_length对平滑的效果参数polyorder的平滑效果savgol_filter简介 Savitzky-Golay滤波器最初由Savitzky和Golay于1964年提出&#xff0c;是光谱预处理中常用滤波方法&#xff0c;它的核心思想是对一定长度窗口内的数据点进行k阶…...

C语言--指针进阶1

目录回顾字符指针指针数组数组指针&数组名和数组名的区别数组指针的使用指针作为形参练习数组参数、指针参数一维数组传参二维数组传参一级指针传参二级指针传参回顾 指针的内容&#xff0c;我们在初级阶段已经有所涉及了&#xff0c;我们先来复习一下 指针就是个变量&am…...

ssh的使用

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法......感兴趣就关注我吧&#xff01;你定不会失望。 &#x1f308;个人主页&#xff1a;主页链接 &#x1f308;算法专栏&#xff1a;专栏链接 我会一直往里填充内容哒&#xff01; &…...

Apache Hadoop生态-目录汇总-持续更新

目录 1&#xff1a;系统服务分布图 3台分布式架构 1台单机架构 服务版本介绍 2&#xff1a;服务目录 存储相关 数据采集 任务调度 即席查询 数据可视化 集群监控 元数据管理 用户认证 权限管理 第三方windows客户端 1&#xff1a;系统服务分布图 3台分布式架构…...

「JVM 编译后话」编译器优化技术

后端编译&#xff08;即时编译、提前编译&#xff09;的目标时将字节码翻译成本地机器码&#xff0c;而难点是输出优化质量较高的机器码&#xff1b; 文章目录1. 优化技术概览2. 方法内联&#xff08;Inlining&#xff09;3. 逃逸分析&#xff08;Escape Analysis&#xff09;4…...

【python学习笔记】:输出与输入

01 输出方式 表达式语句、print()函数和使用文件对象的write()方法。 02 输出形式 格式化输出str.format()函数、转成字符串可以使用repr()或str()函数来实现。 (1)repr()&#xff1a;产生一个解释器易读的表达形式&#xff0c;便于字符串的拼接。 例&#xff1a;输出平方与…...

汽车电子社区交流宣传

http://t.csdn.cn/VSLO0http://t.csdn.cn/VSLO0 当今的汽车行业已经进入了数字化时代&#xff0c;汽车电子软件的开发变得越来越重要。在这个领域&#xff0c;开发者们需要应对各种挑战&#xff0c;包括复杂的硬件和软件交互、高效的嵌入式编程和安全性要求。为了帮助汽车电子…...

String、StringBuilder 和 StringBuffer 详解

碎碎念 这是一道老生常谈的问题了&#xff0c;字符串是不仅是 Java 中非常重要的一个对象&#xff0c;它在其他语言中也存在。比如 C、Visual Basic、C# 等。字符串使用 String 来表示&#xff0c;字符串一旦被创建出来就不会被修改&#xff0c;当你想修改StringBuffer 或者是 …...

windows服务器上传文件解决方案

1.说明 1.如果上传到linux系统&#xff0c;通常使用ftp相关技术&#xff0c;配合windows端的ftp客户端工具比如FileZilla等进行大文件的上传工作。 2.同理windows服务器也可以开启ftp服务用来传输大文件。 3.本文介绍偷懒方式&#xff08;常规是开启windows的ftp服务&#xff0…...

Android Studio翻译插件推介(Translation)

前言 Android Studio翻译插件适合英语水平不太好的程序员&#xff08;比如&#xff1a;我&#xff09;&#xff0c;最常用的翻译插件Translation和AndroidLocalize&#xff0c;本文主要讲解Translation&#xff0c;亲测可用。 先看看效果&#xff1a;这里是Android的API,任意选…...

DNS,DNS污染劫持,DNS加密

1. DNS&#xff08;Domain Name System&#xff09;DNS&#xff08;Domain Name System&#xff09;&#xff0c; 也叫网域名称系统&#xff0c;是互联网的一项服务。它实质上是一个 域名 和 IP 相互映射的分布式数据库.DNS&#xff08;Domain Name Server&#xff0c;域名服务…...

【Python】如何度量优秀代码——静态分析工具

静态分析工具背景有哪些静态分析工具呢度量Python代码的静态属性度量Python的生态系统代码的坏味道在类层面上在方法层面上结语背景 静态代码分析工具能够提炼出丰富的代码静态属性信息&#xff0c;这使得程序员可以对代码的复杂性、可修改性和可读性有进一步的了解。 有哪些…...

Open3D 点云高程归一化(基于2维地面点,Python版本)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 之前的博客中Open3D 点云高程归一化(基于地面点,Python版本)是基于三维空间进行最近地面点的查询操作,这里对其进行修改一下,将点云投影到水平面,基于二维空间进行最近地面点的查询,这种方式对一些较为陡峭的…...

动态系统的建模与分析

前言 CS小菜鸡控制理论入门 视频学习笔记 视频传送门&#xff1a;动态系统的建模与分析】9_一阶系统的频率响应_低通滤波器_Matlab/Simulink分析 拉普拉斯变换 F(s)L{f(t)}∫0∞f(t)e−stdtF(s)\mathcal{L}\{f(t)\}\int_0^\infty f(t)e^{-st}\mathrm{d}tF(s)L{f(t)}∫0∞​f(t)…...

QCC51XX---HCI log

高通在新的S3/S5以及往后新的平台上面,引入了一个新的调试功能。就是标题说的HCI log,他类似air trace那样用来分析蓝牙协议的,这样我们就可以很详细地找到通信协议之间哪个部分出了问题。以前我们都是通过抓包器抓air trace分析的,抓包器一个要几十万,学会这个功能就相当…...

Redis四 原理篇

《Redis四 原理篇》 提示: 本材料只做个人学习参考,不作为系统的学习流程,请注意识别!!! 《Redis四 原理篇》《Redis四 原理篇》1、原理篇-Redis数据结构1.1 Redis数据结构-动态字符串1.2 Redis数据结构-intset1.3 Redis数据结构-Dict1.4 Redis数据结构-ZipList1.4.1 Redis数据…...

从0开始写Vue项目-Vue实现数据渲染和数据的增删改查

从0开始写Vue项目-环境和项目搭建_慕言要努力的博客-CSDN博客从0开始写Vue项目-Vue2集成Element-ui和后台主体框架搭建_慕言要努力的博客-CSDN博客从0开始写Vue项目-Vue页面主体布局和登录、注册页面_慕言要努力的博客-CSDN博客从0开始写Vue项目-SpringBoot整合Mybatis-plus实现…...

Ollama+GPT-OSS-20B黄金组合:无需网络,随时可用的智能助手

OllamaGPT-OSS-20B黄金组合&#xff1a;无需网络&#xff0c;随时可用的智能助手 1. 为什么需要本地化AI助手 在当今AI技术快速发展的时代&#xff0c;云端AI服务虽然方便&#xff0c;但也存在诸多限制&#xff1a;网络依赖、隐私担忧、API费用高昂、响应延迟等问题。对于需要…...

Qwen2.5-14B-Instruct效果展示:像素剧本圣殿输出的专业级分场剧本作品集

Qwen2.5-14B-Instruct效果展示&#xff1a;像素剧本圣殿输出的专业级分场剧本作品集 1. 专业剧本创作的新纪元 在创意写作领域&#xff0c;剧本创作一直是最具挑战性的任务之一。传统创作流程需要编剧投入大量时间构思情节、塑造角色、打磨对白&#xff0c;而今天我们要展示的…...

告别在线翻译限制!Hunyuan-MT 7B本地部署保姆级教程,零基础上手

告别在线翻译限制&#xff01;Hunyuan-MT 7B本地部署保姆级教程&#xff0c;零基础上手 你是否经常遇到这些困扰&#xff1a; 使用在线翻译时担心敏感文档内容泄露遇到小语种翻译结果不准确&#xff0c;特别是韩语敬语和俄语变位错误需要翻译大量文本但受限于API调用次数专业…...

SEO培训需要什么基础知识

SEO培训需要什么基础知识 SEO培训是一个复杂且不断变化的领域。想要在这个领域取得成功&#xff0c;你需要具备一些基础知识。这些知识不仅能帮助你理解搜索引擎优化的基本原理&#xff0c;还能为你的职业发展提供坚实的基础。SEO培训需要哪些基础知识呢&#xff1f;本文将从多…...

VideoAgentTrek-ScreenFilter智能体(Agent)实践:自主决策的视频内容净化流程

VideoAgentTrek-ScreenFilter智能体实践&#xff1a;自主决策的视频内容净化流程 最近在做一个视频内容平台的项目&#xff0c;团队最头疼的问题就是每天海量的UGC视频审核。人工审核不仅成本高、效率低&#xff0c;而且标准还容易不统一。后来我们尝试引入了一些AI内容识别工…...

Appium自动化测试卡在iOS签名?手把手教你搞定Provisioning Profile与entitlements不匹配的坑

Appium自动化测试卡在iOS签名&#xff1f;手把手教你搞定Provisioning Profile与entitlements不匹配的坑 当你兴致勃勃地准备开始iOS自动化测试时&#xff0c;突然遇到"Provisioning profile doesnt match the entitlements files value for the get-task-allow entitleme…...

别再花钱买模板了!用扣子(Coze)和剪映,5分钟搞定城市宣传视频(保姆级节点配置)

零成本打造城市宣传片&#xff1a;Coze剪映全流程实战指南 想象一下这样的场景&#xff1a;你刚接手一个本地文旅推广项目&#xff0c;预算只够买两杯咖啡&#xff0c;但甲方期待的是《航拍中国》级别的视觉大片。传统解决方案要么外包烧钱&#xff0c;要么自己熬夜学剪辑到崩溃…...

# 005、通信栈深度解析:COM、PDU Router与网络管理

从一次诡异的网络丢包说起 上个月在客户现场蹲到凌晨三点,问题现象是ECU在总线唤醒后前两帧数据总是丢。示波器抓波形完全正常,Trace看PDU也的确发到了总线上,可对端节点就是收不到。熬到后半夜,盯着AUTOSAR配置工具里那几十个PDU路由表,突然意识到问题出在PDU Router的时…...

激光测距技术:从原理到选型的全方位指南

1. 激光测距技术的基本原理 激光测距技术本质上是通过测量激光信号从发射到接收的时间或相位变化来计算距离。想象一下你在山谷里大喊一声&#xff0c;通过听到回声的时间差就能估算出对面山壁的距离&#xff0c;激光测距就是这个原理的"高科技版本"。只不过激光的速…...

你的RAG应用安全吗?藏在向量数据库里的‘特洛伊木马’——外部数据注入风险详解

RAG应用安全深度剖析&#xff1a;如何抵御外部数据源中的"特洛伊木马" 当你在咖啡馆用手机查看银行账户时&#xff0c;是否想过那个看似无害的二维码可能藏着窃取密码的指令&#xff1f;类似的威胁正在AI领域上演——攻击者通过污染RAG&#xff08;检索增强生成&…...