LeetCode-538. Convert BST to Greater Tree
538. Convert BST to Greater Tree
Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is changed to the original key plus sum of all keys greater than the original key in BST.
Example:
Input: The root of a Binary Search Tree like this: 5 / \ 2 13 Output: The root of a Greater Tree like this: 18 / \ 20 13
题解:
如果知道二叉搜索树的性质的话,应该还是比较容易的。
遍历二叉搜索树,先遍历最右子树,就一定是节点值最大的,就保持原值(+sum,初始值为0)并记录sum。
返回父节点把父节点就加上sum的值,并更新sum的值。
然后遍历父节点的左子树,用递归就很好实现了。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { int sum = 0; public TreeNode convertBST(TreeNode root) { convert(root); return root; } public void convert(TreeNode t) { if (t == null) return; convert(t.right); t.val += sum; sum = t.val; convert(t.left); } }
当然也可以不使用递归,用stack来记录已经遍历的节点,遍历完成就出站,都是右子树优先
class Solution { public TreeNode convertBST(TreeNode root) { int sum = 0; TreeNode node = root; Stack<TreeNode> stack = new Stack<TreeNode>(); while (!stack.isEmpty() || node != null) { /* push all nodes up to (and including) this subtree's maximum on * the stack. */ while (node != null) { stack.add(node); node = node.right; } node = stack.pop(); sum += node.val; node.val = sum; /* all nodes with values between the current and its parent lie in * the left subtree. */ node = node.left; } return root; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如果单表数据量大,只能考虑分库分表吗?
· 一文彻底搞懂 MCP:AI 大模型的标准化工具箱
· 电商平台中订单未支付过期如何实现自动关单?
· 用 .NET NativeAOT 构建完全 distroless 的静态链接应用
· 为什么构造函数需要尽可能的简单
· C# 多项目打包时如何将项目引用转为包依赖
· 如果单表数据量大,只能考虑分库分表吗?
· 一款让 Everything 更加如虎添翼的 .NET 开源辅助工具!
· (原创)[开源][.Net Framework 4.5] SimpleMVVM(极简MVVM框架)更
· 冲压车间软件实施