LeetCode 538. 把二叉搜索树转换为累加树
1.LeetCode 203. 移除链表元素2.LeetCode 206. 反转链表3.LeetCode 24. 两两交换链表中的节点4.LeetCode 19. 删除链表的倒数第 N 个结点5.LeetCode 160. 相交链表6.LeetCode 142. 环形链表 II7.LeetCode 242. 有效的字母异位词8.LeetCode 349. 两个数组的交集9.LeetCode 202. 快乐数10.LeetCode 704. 二分查找 题解11.LeetCode 27. 移除元素 题解12.LeetCode 977. 有序数组的平方13.LeetCode 209. 长度最小的子数组14.LeetCode 59. 螺旋矩阵 II15.LeetCode 1. 两数之和16.LeetCode 454. 四数相加 II17.LeetCode 383. 赎金信18.LeetCode 15. 三数之和19.LeetCode 18. 四数之和20.LeetCode 76. 最小覆盖子串21.LeetCode 344. 反转字符串22.LeetCode 541. 反转字符串 II23.LeetCode 剑指 Offer 05. 替换空格24.LeetCode 151. 反转字符串中的单词25.LeetCode 剑指 Offer 58 - II. 左旋转字符串26.LeetCode 459. 重复的子字符串27.kmp算法详解28.LeetCode 20. 有效的括号29.LeetCode 1047. 删除字符串中的所有相邻重复项30.LeetCode 150. 逆波兰表达式求值31.LeetCode 239. 滑动窗口最大值32.LeetCode 347. 前 K 个高频元素33.LeetCode 94. 二叉树的中序遍历34.LeetCode 144. 二叉树的前序遍历35.LeetCode 145. 二叉树的后序遍历36.LeetCode 102. 二叉树的层序遍历37.LeetCode 226. 翻转二叉树38.LeetCode 101. 对称二叉树39.LeetCode 104. 二叉树的最大深度40.LeetCode 559. N 叉树的最大深度41.LeetCode 111. 二叉树的最小深度42.LeetCode 222. 完全二叉树的节点个数43.LeetCode 110. 平衡二叉树44.LeetCode 257. 二叉树的所有路径45.LeetCode 404. 左叶子之和46.LeetCode 513. 找树左下角的值47.LeetCode 112. 路径总和48.LeetCode 113. 路径总和 II49.LeetCode 106. 从中序与后序遍历序列构造二叉树50.LeetCode 105. 从前序与中序遍历序列构造二叉树51.LeetCode 654. 最大二叉树52.LeetCode 617. 合并二叉树53.LeetCode 700. 二叉搜索树中的搜索54.LeetCode 98. 验证二叉搜索树55.LeetCode 530. 二叉搜索树的最小绝对差56.LeetCode 501. 二叉搜索树中的众数57.LeetCode 236. 二叉树的最近公共祖先58.LeetCode 235. 二叉搜索树的最近公共祖先59.LeetCode 701. 二叉搜索树中的插入操作60.LeetCode 450. 删除二叉搜索树中的节点61.LeetCode 669. 修剪二叉搜索树62.LeetCode 108. 将有序数组转换为二叉搜索树
63.LeetCode 538. 把二叉搜索树转换为累加树
64.LeetCode 131. 分割回文串题目链接:LeetCode 538. 把二叉搜索树转换为累加树
题意:
给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。
解题思路:
- 根据二叉搜索树的性质 ,二叉树每个节点看做根节点时,右边分支的每个节点都比根节点大,
- 左边分支的每个节点都比根节点小。
- 那么根据题意,我们遍历树的时候,选择反中序遍历,按照右子树 根节点 左子树的次序遍历,并且把遍历到的节点都记录相加。
- 那么我们遍历到某个节点的时候,能保证大于该节点的节点都已经遍历并且统计完成。
- 我们只需要修改数值就好了.
代码:
var sum int
func convertBST(root *TreeNode) *TreeNode {
sum = 0 //sum 表示当前累加的和
traversal(root)
return root
}
func traversal(cur *TreeNode) {
if cur == nil {
return
}
traversal(cur.Right) //右根左的顺序遍历二叉树
cur.Val += sum
sum = cur.Val
traversal(cur.Left)
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix