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

力扣1038. 从二叉搜索树到更大和树(java,树的中序遍历解法)

Problem: 1038. 从二叉搜索树到更大和树

文章目录

  • 题目描述
  • 思路
  • 解题方法
  • 复杂度
  • Code

题目描述

给定一个二叉搜索树 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
树中的所有值均 不重复 。

思路

我们易得到对于一个二叉搜索树,若我们按右-根-左的顺序递归中序遍历可以的得到一个递减的节点值序列,我们再利用一个变量在的过程中将当前的节点值加到变量中再将当前节点值修改为当前的变量值。

解题方法

1.记录一个成员变量sum用于记录中序遍历序列的累加值
2.按右-根-左的顺序递归中序遍历,递归结束条件为root == null
3.在归的过程中让sum加上当前节点值,再让sum赋值给当前节点值

复杂度

  • 时间复杂度:

O ( n ) O(n) O(n)

  • 空间复杂度:

O ( n ) O(n) O(n)

Code


/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {//Time Complexity: O(n)//Space Complexity: O(n)int sum = 0;public TreeNode bstToGst(TreeNode root) {resInorder(root);return root;}private void resInorder(TreeNode root) {if (root == null) return;resInorder(root.right);sum += root.val;root.val = sum;resInorder(root.left);}
}

相关文章:

  • Redis从入门到精通(二)- 入门篇
  • 基于Qt中操作MySQL数据库示例
  • matlab设置背景颜色
  • Linux难学?大神告诉你,Linux到底该怎么自学!
  • 项目讲解:让你在IT行业面试中以开发、实施、产品更近一步
  • STM32F4串口USART发送为00的解决方案
  • Java 开源重试类 guava-retrying 使用案例
  • azkaban二次开发
  • 网工内推 | 字节原厂,正式编,网络工程师,最高30K*15薪
  • 拒绝服务攻击工具的编写
  • 持续集成部署-k8s-配置与存储-配置管理:SubPath
  • C++基础从0到1入门编程(三)
  • Ghidra逆向工具配置 MacOS 的启动台显示(Python)
  • 2023年【T电梯修理】考试题及T电梯修理考试报名
  • 2023年【施工升降机司机(建筑特殊工种)】最新解析及施工升降机司机(建筑特殊工种)考试资料
  • CAP 一致性协议及应用解析
  • conda常用的命令
  • JS函数式编程 数组部分风格 ES6版
  • Laravel Mix运行时关于es2015报错解决方案
  • Phpstorm怎样批量删除空行?
  • Python学习之路13-记分
  • scala基础语法(二)
  • supervisor 永不挂掉的进程 安装以及使用
  • Terraform入门 - 1. 安装Terraform
  • 计算机常识 - 收藏集 - 掘金
  • 聊一聊前端的监控
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 区块链分支循环
  • 如何进阶一名有竞争力的程序员?
  • 使用docker-compose进行多节点部署
  • 说说动画卡顿的解决方案
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 我是如何设计 Upload 上传组件的
  • 我有几个粽子,和一个故事
  • 一道闭包题引发的思考
  • 找一份好的前端工作,起点很重要
  • 自动记录MySQL慢查询快照脚本
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • Semaphore
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #if #elif #endif
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • $refs 、$nextTic、动态组件、name的使用
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (二)hibernate配置管理
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)ORM
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .Net 高效开发之不可错过的实用工具
  • .net中调用windows performance记录性能信息
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually