
leetcode题解538-把二叉搜索树转化为累加树
Node类:定义了节点结构,包含值、左子树和右子树。 convertBST方法:初始化列表,然后调用递归函数 midSearch函数:处理当前节点的右子树和左子树:
发布日期:2025-04-05 06:05:06
浏览次数:10
分类:精选文章
本文共 1725 字,大约阅读时间需要 5 分钟。
将二叉搜索树转换为累加树的问题
问题描述
给定一个二叉搜索树(Binary Search Tree,简称BST),我们需要将其转换为累加树(Greater Tree),其中每个节点的值被修改为原值加上所有大于它的节点值之和。
解题思路
要理解该问题,我们需要分析二叉搜索树的性质和遍历方式。每个节点的新值等于原值加上所有大于它的节点的值,这意味着每个节点的新值是它后续所有右子树节点的和。为了实现这一点,我们可以采取以下步骤:
中序遍历(In-order Traversal):由于二叉搜索树的中序遍历特性,右子树总是先于左子树遍历完成。因此,如果我们先递归遍历右子树,然后遍历左子树,就可以确保在处理左子树节点时,右子树节点已经被处理过。
使用集合存储累加值:为了在处理左子树节点时能够访问右子树节点的累加值,我们使用一个集合(list)来存储处理过节点的累加值。由于我们从右子树开始处理,因此集合中的值是按从大到小排列的。每次处理一个节点时,该节点的新值会等于原值加上集合中最后一个元素的值(即前一个处理过的最大节点的累加值)。
确保节点顺序处理:在递归处理完成右子树后,当处理左子树节点时,右子树已经被处理完毕,因此右子树节点的累加值已经被存储在集合中。处理左子树时,只需将当前节点的值加上集合中最后一个元素即可。
代码实现
public class Node { int val; Node left; Node right; public Node(int val) { this.val = val; }}import java.util.ArrayList;import java.util.List;public class Solution { public class Solution { public static Node convertBST(Node root) { Listlist = new ArrayList<>(); midSearch(root, list); return root; } private static void midSearch(Node node, List list) { // 处理右子树 if (node.right != null) { midSearch(node.right, list); } // 处理当前节点 if (node != null) { if (!list.isEmpty()) { node.val += list.get(list.size() - 1); } list.add(node.val); } // 处理左子树 if (node.left != null) { midSearch(node.left, list); } } }}
代码解释
midSearch
处理根节点。- 处理右子树,确保右子树节点先被处理。
- 在处理当前节点时,如果右子树已经被处理,则将当前节点的值加上右子树累加值(代码中通过检查集合是否为空来实现)。
- 将节点的累加值存储到列表中。
- 处理左子树。
这种方法确保了每个节点被正确地累加上所有大于它的节点的值,从而将原二叉搜索树转换为累加树。
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年04月30日 03时36分27秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
leetcode题解77-子集
2025-04-05
leetcode题解77-组合
2025-04-05
leetcode题解776-旋转字符串
2025-04-05
leetcode题解8-盛最多水的容器
2025-04-05
leetcode题解976-三角形的最大周长
2025-04-05
leetcode题解98-验证二叉搜索树
2025-04-05
LeetCode题解【打家劫舍】(中等难度)
2025-04-05
Leetcode题解(二)
2025-04-05
left join on、where后面的条件的区别
2025-04-05
left join right inner join 区别
2025-04-05
leftjoin多个on条件_MySQL:left join 避坑指南
2025-04-05
legend2---开发日志3(thinkphp的入口目录是public的体现是什么)
2025-04-05
legoblock秀上限
2025-04-05
LeNet介绍-ChatGPT4o作答
2025-04-05
LeNet剪枝
2025-04-05
Length of Last Word
2025-04-05
Lenovo E47A Ubuntu闪屏解决办法
2025-04-05
Leopard系统装好后不能从硬盘引导的朋友看过来
2025-04-05
Lepus搭建企业级数据库全方位监控系统
2025-04-05
LESS 中的变量有什么作用?如何声明和使用变量?
2025-04-05