当前位置: 首页 > news >正文

LeetCode 1038. 从二叉搜索树到更大和树:(反)中序遍历

【LetMeFly】1038.从二叉搜索树到更大和树:(反)中序遍历

力扣题目链接:https://leetcode.cn/problems/binary-search-tree-to-greater-sum-tree/

给定一个二叉搜索树 root (BST),请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。

提醒一下, 二叉搜索树 满足下列约束条件:

  • 节点的左子树仅包含键 小于 节点键的节点。
  • 节点的右子树仅包含键 大于 节点键的节点。
  • 左右子树也必须是二叉搜索树。

 

示例 1:

输入:[4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]
输出:[30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]

示例 2:

输入:root = [0,null,1]
输出:[1,null,1]

 

提示:

  • 树中的节点数在 [1, 100] 范围内。
  • 0 <= Node.val <= 100
  • 树中的所有值均 不重复 。

 

注意:该题目与 538: https://leetcode-cn.com/problems/convert-bst-to-greater-tree/  相同

方法一:(反)中序遍历

二叉搜索树的中序遍历(左子→根→右子)得到的序列是非递减序列。反之,右子→根→左子得到的序列就是非递增序列。

“反中序遍历”的过程中,我们只需要使用一个遍历记录“当前所有遍历过的元素的和”,即为大于等于当前元素的所有元素的和。

  • 时间复杂度 O ( n ) O(n) O(n),其中 n n n是二叉树节点个数
  • 空间复杂度 O ( n ) O(n) O(n),最坏情况下二叉树退化成一条链,递归占用空间 O ( n ) O(n) O(n)

AC代码

C++
class Solution {
private:int last;void dfs(TreeNode* root) {if (!root) {return;}dfs(root->right);last += root->val;root->val = last;dfs(root->left);}
public:TreeNode* bstToGst(TreeNode* root) {last = 0;dfs(root);return root;}
};
Python
# from typing import Optional# # Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = rightclass Solution:def dfs(self, root: Optional[TreeNode]) -> None:if not root:returnself.dfs(root.right)self.last += root.valroot.val = self.lastself.dfs(root.left)def bstToGst(self, root: TreeNode) -> TreeNode:self.last = 0self.dfs(root)return root

同步发文于CSDN,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/134782862

相关文章:

  • C语言面试之旅:掌握基础,探索深度(面试实战之c语言关键词中篇)
  • 软件分享--智能照片识别分类软件
  • 【Java进阶】-- 设计模式
  • 572 - Oil Deposits (UVA)
  • Linux下设置redis临时密码和长期密码
  • python用YOLOv8对图片进行分类
  • springboot统一异常处理
  • Hana Studio打开BW失败
  • 基于Springboot的秒杀系统(有报告)。Javaee项目,springboot项目。
  • git常用命令小记
  • 软件工程导论学习资料
  • Web前端JS如何获取 Video/Audio 视音频声道(左右声道|多声道)、视音频轨道、音频流数据
  • Python----网络爬虫
  • 极米Z系列双十一销量超10万台 极米Z7X成轻薄投影首选
  • LeetCode [中等]岛屿数量
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • 78. Subsets
  • css选择器
  • Java-详解HashMap
  • OSS Web直传 (文件图片)
  • passportjs 源码分析
  • Spring框架之我见(三)——IOC、AOP
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 理清楚Vue的结构
  • 力扣(LeetCode)56
  • 聊聊sentinel的DegradeSlot
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 思考 CSS 架构
  • 移动端解决方案学习记录
  • 赢得Docker挑战最佳实践
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​linux启动进程的方式
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • ###STL(标准模板库)
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #前后端分离# 头条发布系统
  • $.ajax,axios,fetch三种ajax请求的区别
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (Java数据结构)ArrayList
  • (八)c52学习之旅-中断实验
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (附源码)计算机毕业设计高校学生选课系统
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • .gitignore文件_Git:.gitignore
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .net开发引用程序集提示没有强名称的解决办法
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • .net与java建立WebService再互相调用
  • ::什么意思
  • :=