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

理解题意

        所谓累加树:对于每个节点,将所有比它大的点累加于这一点。

        而二叉搜索树:任何一个中间节点,都大于左子树任何节点,小于右子树所有节点。

        而二叉搜索树中序排列是严格单调递增的序列。

        所以二叉搜索树累加树的话,则是将右子树的节点加到中间节点,再将中间节点加到左子树。

        从中序序列来看,可以使用双指针节点,一个pre指针,一个cur指针。从后往前遍历,将pre指向比cur大的值,始终将pre加到cur

         从树的结构来看,pre之上前一位比cur值大的节点,cur指向当前最大的节点。

        树的遍历顺序为:右中左

解题方法:

        递归 迭代

1.递归

节点处理顺序为右中左,pre总是指向比当前值大的值的累加和。

public TreeNode convertBST(TreeNode root) {AddBST(root);return root;}//指向比当前值大的值的累加int pre=0;public void AddBST(TreeNode cur) {if(cur==null)return;if(cur.right!=null){AddBST(cur.right);}cur.val+=pre;pre=cur.val;if(cur.left!=null) AddBST(cur.left);}

2.迭代

入栈顺序总是左中右,出栈顺序右中左,pre总是指向比当前值大的值的累加和。

    public TreeNode convertBST(TreeNode root) {if(root==null) return root;int pre=0;Stack<TreeNode> stack=new Stack<>();stack.push(root);while(!stack.isEmpty()){TreeNode cur=stack.pop();if(cur!=null){if(cur.left!=null) stack.push(cur.left);stack.push(cur);stack.push(null);if(cur.right!=null) stack.push(cur.right);}else{cur=stack.pop();cur.val+=pre;pre=cur.val;}}return root;}

3.分析

时间复杂度:

        递归:O(n)

        迭代:O(n)

空间复杂度:

        递归:O(n)

        迭代:O(2n)

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

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

相关文章

VBA字典与数组第八讲:数组及数组公式结果的制约性和集合性

《VBA数组与字典方案》教程&#xff08;10144533&#xff09;是我推出的第三套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;字典是VBA的精华&#xff0c;我要求学员必学。7.1.3.9教程和手册掌握后&#xff0c;可以解决大多数工作中遇到的实际问题。…

Mysql内联接inner join以后数据条数比原数据表多

数据表A有500条数据&#xff0c;数据表B有600条数据&#xff0c;执行如下sql&#xff0c;预期500条结果 select * from A inner join B on A.id b.a_id;但是执行结果有520条&#xff0c; 原因&#xff1a; B中有一些c_id重复的数据&#xff0c;在与A表进行内联接的时候&…

OpenGL学习(一)绘制一个图形

本文使用Qt进行操作演示。 注意: 坐标原点位于屏幕中心 坐标参数:0.0f - 1.0f 颜色参数:0.0f - 1.0f OpenGL提供了几种用于绘制几何图形的绘制模式。下面是一些常用的绘制模式&#xff1a; 点&#xff08;GL_POINTS&#xff09;&#xff1a;绘制单个点。 线&#xff08;GL_LIN…

【云备份】服务端数据管理模块

21. 服务端工具类实现-文件实用工具类设计 不管是客户端还是服务端&#xff0c;文件的传输备份都涉及到文件的读写&#xff0c;包括数据管理信息的持久化也是如此&#xff0c;因此首先设计封装文件操作类&#xff0c;这个类封装完毕之后&#xff0c;则在任意模块中对文件进行操…

Tap虚拟网卡 (草稿)

1 概述 Tap设备通常用于虚拟化场景下&#xff0c;参考如下场景&#xff1a; 图中标注了关键函数&#xff0c;以及数据流向。 tun有两个数据接口&#xff0c; file&#xff0c;给用户态使用&#xff1b;socket&#xff0c;给内核态使用&#xff0c;例如vhost 2 异步处理 图…

IRS辅助的隐蔽通信 (IRS aided covert communication)

这里写自定义目录标题 系统模型与问题formulation系统模型Willie的检测优化问题构建 提出算法A IRS反射矩阵优化Willie的Detection Error Probability (DEP) 本文是论文 Covert Communication in Intelligent Reflecting Surface Assisted Networks With a Friendly Jammer 的阅…

常见算法

简单认识算法 什么是算法&#xff1f; 解决某个实际问题的过程和方法&#xff01; 排序算法 冒泡排序 选择排序 冒泡排序 每次从数组中找到最大值放在数组的后面去 import java.util.Arrays;public class Work1 {public static void main(String[] args) {//准备一个数组in…

浅谈对ASP.NET MVC(微软Web开发框架)的理解

今天来总结下y2扩展就业的课程使用asp.netmvc开发企业级应用自学成果。首先ASP.NET是Microsoft公司.NetFramwork框架的一个动态网页开发的核心技术集&#xff0c;他可以帮助.net方向的动态web开发人员快速高效制作动态网页交互&#xff0c;同样支持jquery&#xff0c;js和h5c3&…

vue计算排列布局

1、效果 2、html <div class"databubble"><div ref"content"><divv-for"(item, index) in databubble"ref"contentPage":key"index"class"contentPage"><div><span class"title&…

2023年全国硕士研究生入学统一考试管理类专业学位联考逻辑试题——解析版

文章目录 2023年全国硕士研究生入学统一考试管理类专业学位联考逻辑试题三、逻辑推理真题(2023-26)真题(2023-27)真题(2023-28)真题(2023-29)真题(2023-30)真题(2023-31-32)真题(2023-33)真题(2023-34)真题(2023-35)真题(2023-36)真题(2023-37-38

Vue2+echarts 实现图表的简单绘制

Echarts是一个基于JavaScript的开源可视化库&#xff0c;由百度开发和维护。它通过简单的配置方式&#xff0c;就可以实现各种复杂的数据可视化和图表展示。Echarts支持多种图表类型&#xff0c;包括柱状图、折线图、饼图、散点图、漏斗图等&#xff0c;同时还支持地图可视化和…

SQL自学通之表达式条件语句与运算

目录 一、目标 二、表达式条件语句 1、表达式&#xff1a; 2、条件 2.1、WHERE 子句 三、运算 1、数值型运算: 1.1、加法() 1.2、减法 (-) 1.3、除法&#xff08;/&#xff09; 1.4、乘法 &#xff08;*&#xff09; 1.5、取模 &#xff08;%&#xff09; 优先级别…

HTTP缓存

需求开发中不断的往项目中添加图片、字体等这些静态资源使得项目打包体积越来越大。 打包后这些静态资源占据了包体积的大部分。 基于此&#xff0c;我们准备将静态资源从项目中移出来放到 oss 云服务上&#xff0c;这样项目的体积会缩小很多&#xff0c;打包速度也会快很多 …

[论文笔记] tiktoken中的gpt4 tokenizer

亲测可用!!!!! 注意是bytelevel的BPE!! 只有vocab.json是不ok的,只能encode单字节的字符,对于中文这种会encode之后tokens,ids都是[]。 gpt-tokenizer - npm GitHub - openai/tiktoken: tiktoken is a fast BPE tokeniser for use with OpenAIs models. GitHub - …

Android studio版本对用的gradle版本和插件版本(注意事项)

简介 Android Studio 构建系统以 Gradle 为基础&#xff0c;并且 Android Gradle 插件添加了几项专用于构建 Android 应用的功能。虽然 Android 插件通常会与 Android Studio 的更新步调保持一致&#xff0c;但插件&#xff08;以及 Gradle 系统的其余部分&#xff09;可独立于…

接口测试很难?1分钟带你入门接口自动化测试

1、什么是接口&#xff1f; 接口是连接前台和后台的桥梁&#xff0c;前台通过接口调用后端已完成的功能&#xff0c;而无需关注内部的实现细节。借助于接口&#xff0c;可以实现前后台分离&#xff0c;各自完成开发工作后&#xff0c;进行联调&#xff0c;提高工作效率 2、接…

系列十三、SpringBoot的自动配置原理分析

一、概述 我们知道Java发展到现在功能十分的强大&#xff0c;生态异常的丰富&#xff0c;这里面离开不了Spring及其家族产品的支持&#xff0c;而作为Spring生态的明星产品Spring Boot可以说像王者一般的存在&#xff0c;那么的耀眼&#xff0c;那么的光彩夺目&#xff01;那么…

分享66个菜单导航JS特效,总有一款适合您

分享66个菜单导航JS特效&#xff0c;总有一款适合您 66个菜单导航JS特效下载链接&#xff1a;https://pan.baidu.com/s/1dpGGbptx6hEKcBnTMNLIdA?pwd6666 提取码&#xff1a;6666 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;…

聚焦工业生产安全,汉威科技推出最轻最小迷你便携式单气体检测仪

有毒有害气体、可燃气体等是工业生产中常见的危险因素。我国已经出台了多项法律法规、行业标准&#xff0c;在石油、化工、钢铁冶金、危化品、矿业等行业以及有限空间相关场所作业&#xff0c;应当佩戴便携式气体检测仪&#xff0c;以保障作业人员的安全。 然而&#xff0c;近年…

SSM项目实战-前端-将uid存放在pinia中

https://pinia.vuejs.org/zh/getting-started.html 1、安装pinia npm install pinia {"name": "pro20-schedule","private": true,"version": "0.0.0","type": "module","scripts": {"d…