LeetCode算法题-Convert BST to Greater Tree(Java实现)

VS2017配置PCL1.9.1 for win10(超详细) 准备工作 VS2017 自行下载 PCL1.9.1 点击链接跳转Github下载,根据自己的环境选择 win64或win32,作者下载的是:PCL-1.9.1-AllInOne-msvc2017-win64.exepcl-1.9.1-pdb-msvc2017-win64.zip 安装PCL 双击点开PCL-1.9.1-AllInOne-msvc2017-win64.exe,选择Add PCL to the system PATH for all users, 更改安装路径,E:\Progra 阅读详情

这是悦乐书的第255次更新,第268篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第122题(顺位题号是538)。给定二进制搜索树(BST),将其转换为更大树,使原始BST的每个键都更改为原始键加上所有键的总和大于BST中的原始键。例如:

输入:二进制搜索树的根,如下所示:

  5
 / \
2   13

输出:大树的根,如下所示:

 18
 / \
20 13

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

题目的意思是将一个二叉搜索树的节点按照右根左的顺序累加,用不断累加的值作为原节点新的节点值,至于返回后新的二叉树,题目并没有要求是二叉搜索树,因此我们可以直接使用递归方法,顺序为右根左,另外还需要定义一个全局变量sum,来依次累加节点值。

此解法的时间复杂度是O(n),空间复杂度是O(n)。

private int sum = 0;
public TreeNode convertBST(TreeNode root) {
    if (root == null) {
        return null;
    }
    convertBST(root.right);
    sum += root.val;
    root.val = sum;
    convertBST(root.left);
    return root;
}

03 第二种解法

我们还可以使用迭代的方法来解,借助栈(或者队列)来实现。先将当前节点的所有右子节点进栈,然后出栈一个节点,此节点是最下面一层的第一个右子节点,然后节点值开始累加,然后再将左子节点依次进栈。

此解法的时间复杂度是O(n),空间复杂度是O(n)。

public TreeNode convertBST2(TreeNode root) {
    if (root == null) {
        return null;
    }
    int sum = 0;
    Stack<TreeNode> stack = new Stack<TreeNode>();
    TreeNode node = root;
    while (!stack.isEmpty() || node != null) {
        while (node != null) {
            stack.push(node);
            node = node.right;
        }
        node = stack.pop();
        sum += node.val;
        node.val = sum;
        node = node.left;
    }
    return root;
}

04 第三种解法

还有一种比较厉害的解法,Reverse Morris In-order Traversal(逆向莫里斯有序遍历),是由一个叫Morris的人提出的,感兴趣的可以去仔细研究下。

此解法的时间复杂度是O(n),空间复杂度是O(1)。

public TreeNode convertBST3(TreeNode root) {
    TreeNode cur = root;
    int sum = 0;
    while (cur != null) {
        if (cur.right == null) {
            sum += cur.val;
            cur.val = sum;
            cur = cur.left;
        } else {
            TreeNode prev = cur.right;
            while (prev.left != null && prev.left != cur) {
                prev = prev.left;
            }
            if (prev.left == null) {
                prev.left = cur;
                cur = cur.right;
            } else {
                prev.left = null;
                sum += cur.val;
                cur.val = sum;
                cur = cur.left;
            }
        }
    }
    return root;
}

05 小结

算法专题目前已日更超过三个月,算法题文章122+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

【制作100个unity实战之2】实现一款简单的FPS游戏 你将学到: fps武器脚本 基础瞄准功能 僵尸敌人AI 巡逻范围 攻击间 搜寻半径 追击 枪声吸引周围的僵尸 击中僵直效果 阅读详情

相关推荐

Isaac Sim 使用经验(配置要求,云服务器)

Google Colab及AutoDL都是在docker内运行,其中google colab并不支持docker指令,而依照AutoDL的相关文档,AutoDL并不直接提供docker指令。2. Google Colab/AutoDL 不支持图形化界面,图形渲染等任务,所以没有办法使用Omniverse Streaming进行直播,从而更好的对结果进行展示。对于第一点,或许存在直接手动复现镜像的可能,但是考虑到Isaac Sim/Isaac Lab由于比较新,可能不够稳定,因此还是按照官方文档进行部署。

weixin_44211433的博客 4587

STM32调试利器ST-LINK:从SWD协议到在线调试实战

嵌入式开发中,调试器是连接代码与芯片内部状态的桥梁。ST-LINK作为STM32官方调试工具,通过SWD协议实现固件烧录与实时调试。其原理基于ARM Cortex-M内核的调试接口,支持断点、单步、变量观察等功能,技术价值在于大幅提升问题定位效率。在软件仿真与硬件在线调试两种模式下,开发者可验证逻辑、排查时序问题。应用场景涵盖GPIO配置、通信协议解析、偶发Bug追踪等。掌握ST-LINK的调试技巧,能显著缩短开发周期,是STM32开发者必备的核心技能。

weixin_34054866的博客 287

STM32CubeIDE无法连接STLinkV2的一个可能原因

前些日子买了个新的STLINKV2 , ( 老的被我家猫猫一泡尿送上西天了)刚开始还挺正常的, 后来有一天就突然间发现无法调试了.网上尝试了各种方法, 各种操作. 百度了好久. 最后好在我自己研究出来了.我使用的是 STM32CubeIDE 这个开发工具调试选项如下图其它的不需要修改, 然后点击下面的apply 按钮, 然后调试Debug, 提示 No STLink 如下图后来尝试了下载ST-LINK Utility 用它是可以正常连接STLink的, 然后也能正常进行升级操作.

走错路的程序员 9828

【LeetCode】538. Convert BST to Greater Tree

问题描述问题链接:https://leetcode.com/problems/convert-bst-to-greater-tree/#/descriptionGiven a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is changed to the

墨染百城 3848

【STM32/GD32】Keil uVision生成bin文件:从编译选项到Bootloader升级实战

本文详细讲解了如何在Keil uVision中配置STM32/GD32工程,使其在编译后自动生成Bootloader升级所需的bin文件。通过解析fromelf工具的使用、构建后命令的配置以及内存布局规划,深入阐述了bin文件在固件升级中的核心作用,并提供了串口Bootloader的实战框架与常见问题解决方案。

weixin_29190169的博客 391

MATLAB算法实战应用案例精讲-【数模应用】梯度提升决策树(GDBT)(附python代码)

GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,它在被提出之初就和SVM一起被认为是泛化能力(generalization)较强的算法。近些年更因为被用于搜索排序的机器学习模型而引起大家关注。.........

qq_36130719的博客 2077

JavaScript数据结构复习(篇7-1)树的基本概念

树的定义 二叉树

YanHSama的博客 259

Qt实现窗口自适应分辨率大小

如果希望窗口大小始终保持与屏幕分辨率一致,可以将上述代码放在窗口的resizeEvent()函数中。这样,每当窗口大小发生变化时,都会自动调用resizeEvent()函数,从而实现窗口大小的自适应调整。在Qt中,可以通过一些简单的方法实现窗口大小随分辨率变化而自适应调整。获取到当前屏幕的分辨率后,可以根据需要调整窗口的大小。无论在何种分辨率下运行应用程序,窗口都能够正确地自动调整大小,提供更好的用户体验。除了调整窗口大小,还可以考虑将窗口设置为最大化,以充分利用屏幕空间。步骤2:调整窗口大小。

FuJavascript的博客 3655

二叉树遍历之morris traversal

刚开始接触到这个是因为算法导论习题10.4-5,其中有一句话说不能改变二叉树结构,即使临时改变也不行,个人就感觉改变二叉树结构也可以进行遍历。 搜索的过程中发现了morris 遍历,刚开始根本不相信如此短的代码可以使用无栈、O(1) 空间进行二叉树遍历,但深入之后才发现这个想法是如此的巧妙,感谢J Morris,不知这个Morris 和KMP中的Morris 是否是同一个人?

白水白水的专栏 9068

rk3506上移植lvgl应用

本文介绍在RK3506开发板上移植和运行LVGL图形库的方法。

m0_60805802的博客 1158

人体红外传感器HC-SR501

本文记录的是如何用stm32使用HC-SR501。实验平台:野火指南者stm32f103vet6。实验现象:一旦有人体经过,LED会亮红色。HC-SR501 传感器工作原理人体都有恒定的体温,一般在 37 度,所以会发出特定波长 10UM 左右的红外线,被动式红外探头就是靠探测人体发射的 10um 左右的红外,进行工作的。人体发射的 10um 左右。

weixin_43772611的博客 1万+

LeetCode538. Convert BST to Greater Tree

Convert BST to Greater Tree 1、原题 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 greate

u010217031的博客 1057

【大模型】AI 辅助编程操作实战使用详解

AI 编程实战使用详解

congge 8460

leetcode 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.

淡然坊 1011

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

LeetCode-538. Convert BST to Greater Tree [C++][Java]

Given therootof 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 the sum of all keys greater than the original key in BST.

贫道绝缘子的博客 1021

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Leetcode——538. Convert BST to Greater Tree

题目原址 https://leetcode.com/problems/convert-bst-to-greater-tree/description/ 题目描述 Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is changed to...

想当厨子的程序媛 604

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

LeetCode-Convert BST to Greater Tree

LeetCode Java Convert BST to Greater Tree

坟头草一米七五 295

LeetCode Top 100 Liked Questions 538. Convert BST to Greater Tree (Java版; Easy)

welcome to my blog LeetCode Top 100 Liked Questions 538. Convert BST to Greater Tree (Java版; Easy) 题目描述 Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the origin...

littlehaes的博客 221

LeetCode 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. Exampl...

weixin_34242331的博客 89

LeetCode Convert BST to Greater Tree

原题链接在这里:https://leetcode.com/problems/convert-bst-to-greater-tree/description/ 题目: Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is changed...

weixin_30826761的博客 83

LeetCode - Medium - 538. Convert BST to Greater Tree

Topic Tree Depth-first Search Binary Search Tree Recursion Description https://leetcode.com/problems/convert-bst-to-greater-tree/ Given the root of a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is change

KISS 190

【Leetcode】538. Convert BST to Greater Tree

题目地址: https://leetcode.com/problems/convert-bst-to-greater-tree/ 给定一棵二叉搜索树,要求将每个节点都改为其与所有比其大的节点值之和。 思路是中序遍历。用一个变量记录比当前节点大的节点值总和,每次遍历到一个节点的时候,以该和加上当前节点值来更新当前节点,然后同时维护这个变量的定义。代码如下: public class Solution { private int sum = Integer.MAX_VALUE;

数学、算法爱好者的博客 183

Java描述 LeetCode,538. Convert BST to Greater Tree 把二叉树转换成累加树,递归解法+Morris算法

大家好,我是河海哥,专注于后端,如果可以的话,想做一名code designer而不是普通的coder,一起见证河海哥的成长,您的评论与赞与关注是我的最大动力,如有错误还请不吝赐教,万分感谢。一起支持原创吧!纯手打有笔误还望谅解。 1-1:问题描述 Given the root of a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is changed to .

人在江湖 328

LeetCode—538. 把二叉搜索树转换为累加树(Convert BST to Greater Tree)——分析及代码(Java)

LeetCode—538. 把二叉搜索树转换为累加树[Convert BST to Greater Tree]——分析及代码[Java]一、题目二、分析及代码1. 反向中序遍历(1)思路(2)代码(迭代)(3)结果(迭代)(4)代码(递归)(5)结果(递归)2. Morris 遍历(1)思路(2)代码(3)结果三、其他 一、题目 给出二叉搜索树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和

江南土豆的博客 152

LeetCode 题解之 538. Convert BST to Greater Tree

538. Convert BST to Greater Tree 题目描述和难度 题目描述: 给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。 例如: 输入: 二叉搜索树: 5 / \ ...

李威威的博客 353

Leetcode 538. Convert BST to Greater Tree 把二叉搜索树转换为累加树

题目:给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。例如:输入: 二叉搜索树: 5 / \ 2 13 输出: 转换为累加树: 18 / \...

zhangzhetaojj的博客 282
上一篇: LeetCode算法题-K-diff Pairs in an Array(Java实现)
下一篇: LeetCode算法题-Reverse String II(Java实现)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值