【LeetCode笔记】538. 把二叉搜索树转换为累加树(Java、二叉搜索树、递归)

文章目录

  • 题目描述
  • 思路 & 代码
      • 更新版

题目描述

  • 注意是二叉搜索树,可以找出顺序
  • 有点类似中序遍历
    在这里插入图片描述

思路 & 代码

  • 思路:当前结点 root 带着父值一直走到最右边,再一个个累加右值
  • 更新 root.val += rightSum,然后以 root.val 作为左子树的父值,递归这个过程
  • 左子树递归结束,当前 root 的栈帧返回左子树的值(毕竟这边才是最大值嘛)
  • 时间复杂度O(n),相当于遍历每一个结点
/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public TreeNode convertBST(TreeNode root) {toConvertBST(root, 0);return root;}// 返回给父结点的赋值(当前已更新子树最左值)int toConvertBST(TreeNode root, int paNum){// 往右走,一直走到结束,返回父值if(root == null){return paNum;}// 先把父值传到最右边int rightSum = toConvertBST(root.right, paNum);// 当前值等于 当前 + 右子树的最左值root.val += rightSum; // 把当前和当作父值,传给左结点int leftSum = toConvertBST(root.left, root.val);// 返回左值return leftSum;}
}

更新版

  • 一段时间过去后,写出了更加简单的代码呢!
  • 思路还是:右 - 根 - 左,递归
class Solution {int preNum = 0;public TreeNode convertBST(TreeNode root) {if(root != null) {convertBST(root.right);root.val += preNum;preNum = root.val;convertBST(root.left);}return root;}
}

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

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

相关文章

计算机1.1n次方等于100,1的N次方等于1,那1.01的365次方是多少?小进步助你迎来闪光时刻...

茨威格在《人类群星闪耀时》的序言中说道:“在一个民族内部,总是需要有几百万人才能产生一个天才,同样,总是需要有无数的光阴无所谓的流逝,才能等到一个真正具有历史意义的时刻,一个人类群星闪耀的时刻出现…

如何修改ant-input的高度_水质自动采样器的流量计功能如何应用?

水质自动采样器一般都具有等比例采样功能,根据污水流量的多少来自动调节采样量,对于一些性能的采样器甚至会集成内置流量计功能,只要用户配套一个液位变送器就可以实现明渠污水流量计的功能,可以说是一物两用、一举两得&#xff0…

【LeetCode笔记】26. 删除有序数组中的重复项(Java、原地)

文章目录题目描述代码 & 思路题目描述 看到群友说今天的每日是简单题,我啪的一下就开刷了,很快啊!注意点:原地 & O(1)空间 代码 & 思路 有点类似移动零,就是把右边的有效值,一个个往左边推…

linux内核深度解析_十年磨一剑,第一本龙芯平台的Linux内核书来了

《用“芯”探核:基于龙芯的Linux内核探索解析》是一本基于龙芯平台,结合源代码来探索和解析Linux-5.x内核的书。市面上解析Linux 内核的经典书籍已有不少,尤其是被称为Linux 内核领域的“四库全书”:《Linux 内核设计与实现》 《L…

服务器能记录远程访问用户嘛,bat记录远程桌面连接登录信息

1.记录远程桌面的连接登录日志方法::RDPlog.bat:hu 20110201:记录登陆信息echo offset mnetstat -nfor /f "tokens4 delims: " %%i in (%m%^|find "3389") do set mstsc%%iecho %date% %time:~0,-3% %USERNAME% %mstsc% >> RDPlog.txt…

【LeetCode笔记】27. 移除元素(Java、原地)

文章目录题目描述思路 & 代码更新版题目描述 打卡每日~感觉和昨天的每日基本上一样,甚至还更简单(简单题我重拳出击!) 思路 & 代码 就是维护一个 nowLen,再遍历一次即可。 class Solution {pu…

【LeetCode笔记】124. 二叉树中的最大路径和(Java、二叉树、DFS)

文章目录题目描述思路 & 代码更新版题目描述 好家伙我可太激动了,第一次光速A困难题。应该是因为写过类似的二叉树的直径,不过这道倒是属于简单题。。面试常考题,刷codetop看到了就写写 思路 & 代码 递归过程是自底向上的递归过程…

jupyternotebook虚拟环境无法连接服务_详解pycharm连接远程linux服务器的虚拟环境的方法_python...

这篇文章主要介绍了pycharm连接远程linux服务器的虚拟环境的详细教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下一、前提条件1、确保linux服务器已经安装好虚拟环境,并且虚…

【LeetCode笔记】4. 寻找两个正序数组的中位数(Java、二分、递归)

文章目录题目描述思路 & 代码题目描述 算是拖了好久的题目 ,一开始刷的时候没打算直接冲困难不过面试常客了,还是得冲掉,而且不能留下心魔嘛!难点在于实现时间复杂度 O(log(m n)),显而易见得用二分法 思路 &a…

梦幻西游服务器每周几维护,梦幻西游5月6日维护公告:唯美版地图不再更新

为保证服务器的运行稳定和服务质量,《梦幻西游2》所有服务器将于2014年5月6日上午8:00停机,进行每周例行的维护工作。预计维护时间为上午8:00~9:30。如果在预定时间内无法完成维护内容,开机时间也将继续顺延。请各位玩家相互转告&…

浏览器市场占有率_全球市场占有率第一的谷歌浏览器添加对ipfs://的支持!

欢迎来到IPFS周报!👋星际文件系统(IPFS)是一种新的超媒体分布式协议,基于内容和身份的寻址。IPFS支持创建完全分布式应用程序。它旨在使网络更快,更安全,更开放。由于这是一个非常大的项目,我们在每期周报中…

win10 系统地图无法定位服务器,图文修复win10系统无法打开定位服务的详细技巧...

有很多网友在使用电脑的过程总难免会遇到win10系统无法打开定位服务的情况。尽管处理方法特别的容易,可是也有很多朋友不知道win10系统无法打开定位服务究竟要怎么处理。我就给大家整理总结了win10系统无法打开定位服务的解决方法,解决起来也不难&#x…

【LeetCode笔记】41. 缺失的第一个正数(Java、哈希)

文章目录题目描述思路 & 代码题目描述 难点在于时空复杂度的要求想出最优方法,需要认真理解题目。 思路 & 代码 做法:建立一个逻辑上的哈希表,令 nums[i] i 1,比如 nums[0] 1。那么第一个不符合这个要求的元素的下…

笔记本电脑如何保养_电脑保养只是吹一吹?别再被骗了,电脑没做这些就等于没保养...

汽车大约跑5000KM就需要保养一次,电脑与汽车一样,在使用一定时间的时候也需要保养一次,电脑保养对于很多朋友来说还是很陌生的,在这里小编就给大家做一个简单的科普,电脑保养主要指的是清理灰尘与更换硅脂,…

【LeetCode笔记】199. 二叉树的右视图(Java、二叉树、层序遍历)

文章目录题目描述思路 & 代码题目描述 挺简单的,直接看思路代码吧。 思路 & 代码 就是一个层序遍历,取每层的最右边结点即可 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* T…

ibm笔记本电脑电池_笔记本电池怎么充电 笔记本电脑电池充电方法【详解】

笔记本电脑以其精致小巧的外形、方便携带的特点,受到了众多人士的喜爱。在 办公室 没有完成的工作,可以随时带到家中去完成,它的存在就是为了我们能有便捷的办公模式。那么对于这个日夜陪伴我们的好物件大家都是怎么充电的呢?方法…

电脑键盘下划线怎么打_图文详解笔记本电脑键盘失灵怎么办

相信有很多朋友都遇到过笔记本键盘失灵的情况,其实笔记本键盘失灵的问题是可大可小的,下面小编就给大家详细介绍关于怎么解决笔记本电脑失灵的操作方法,让大家在遇到问题时自己就能够解决这些问题。方法一。1。右键单击桌面右下角的输入方法&…

【LeetCode笔记】69. x 的平方根(Java、二分)

文章目录题目描述思路 & 代码更新版题目描述 本质&#xff1a;找满足 k * k < x 的最大 k 思路 & 代码 二分&#xff0c;对满足 k * k < x 的最大 k进行查找。注意极端数据&#xff0c;用 long暴力法先来一个 class Solution {public int mySqrt(int x) {in…

opencv 模板匹配_详细剖析模板匹配

点击上方“新机器视觉”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达模板匹配介绍我们需要2幅图像&#xff1a;原图像 (I): 在这幅图像里,我们希望找到一块和模板匹配的区域模板 (T): 将和原图像比照的图像块模板匹配就是在整个图像区域发现…

【LeetCode笔记】143. 重排链表(Java、链表、栈、快慢指针)

文章目录题目描述思路 & 代码更新版&#xff1a;快慢指针 翻转链表题目描述 一看题目反序&#xff1a;用栈更新&#xff1a;O(1) 空间复杂度 思路 & 代码 先快慢指针&#xff0c;找到需要入栈的起点&#xff0c;然后逐个入栈然后逐个出栈&#xff0c;进行重排即可…