Leetcode1038. 从二叉搜索树到更大和树(每日一题)

 

目录

⚽题目: 

🏐题目分析: 

🏀题目解答:

🥎代码如下:


⚽题目: 

给定一个二叉搜索树 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、看到树的问题首先想到递归处理,递归处理的方法首先想到前序、中序、后序三种类型。一般树的问题的解决都是这三种类型的变形!!

2、接下来观察本题树的特征,树的特征观察一定不要整体去看,相反要局部的去看,这与我们递归化为子问题处理有内在逻辑关系。例如本题看这个树的特征,我们就选择根节点去看,思考根节点和其他节点有什么内在关系。

3、做了以上分析,最后我们再根据得到的特征关系去思考如何进行递归,也就是如何将一个大问题分解为子问题去解决。

🏀题目解答:

接下来的题目解答就是根据上面的三个思考方向对问题进行思考解决。

1、本题的递归方法是中序遍历的变形。先处理右子树再处理根节点最后处理左子树。采取这种策略的原因是根节点的值和右子树有关,而左子树的处理和右子树以及根节点都没有关系。

2、局部来看,根节点的值就是其右子树的结点值加上根节点本身的值。而右子树节点的值又是他的右子树节点值加上其本身的值。如此递归往复

3、修改整个树的结点的值可以分解为——>>修改右子树所有结点值、修改整个树根节点值、修改左子树所有结点值。而整个树根节点的值又可以化为:整个树根节点的值=右子树根节点的值+整个树根节点原本的值。根据这个求解公式大家不难发现,整个树根节点的值的修改依赖于右子树结点值的修改。这也就是我们选择中序解决问题的原因。

分析到这里,我想大家也就明白啦~~

🥎代码如下:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int s=0;TreeNode* bstToGst(TreeNode* root) {dfs(root);return root;}void dfs(TreeNode* root){if(root==NULL)return;dfs(root->right);s+=root->val;//这一步s=s+root->val中前面的s可以认为是该结点右子树所有右节点值之和,新的s就是目前root应该是的值root->val=s;dfs(root->left);}
};

 创作不易,如果觉得内容不错,收藏一下呗,小猫求求了~

真的真的不行,就给个免费的赞吧~~ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/197762.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Stream 流

配合Lambda表达式&#xff0c;简化集合和数组的操作 获取Stream流对象 集合 Collection接口中的方法&#xff1a;stream() 单列&#xff1a;直接调用stream() 多列&#xff1a;间接获取&#xff0c;map.entrySet() ArrayList<String> list new ArrayList<>();…

SSM项目实战-前端-在Index.vue中展示第一页数据

1、util/request.js import axios from "axios";let request axios.create({baseURL: "http://localhost:8080",timeout: 50000 });export default request 2、api/schedule.js import request from "../util/request.js";export let getSchedu…

4-Docker命令之docker run

1.docker run介绍 docker run命令是用来创建新的容器并运行相关命令 2.docker run用法 docker run [参数] [root@centos79 ~]# docker run --helpUsage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]Create and run a new container from an imageAliases:docker conta…

传输层可靠传输的原理

目录 1.停止等待协议 2.连续ARQ协议 3.TCP报文段的首部格式 4.TCP的滑动窗口机制 &#xff08;1&#xff09;发送窗口 &#xff08;2&#xff09;接收窗口 &#xff08;3&#xff09;发送缓存 5.超时重传时间的选择 6.选择确认SACK(Selective ACK) 7.使用滑动窗口实现…

PAD平板签约投屏-高端活动的选择

传统的现场纸质签约仪式除了缺乏仪式感之外还缺少互动性&#xff0c;如果要将签约的过程投放到大屏幕上更是需要额外的硬件设备成本。相比于传统的纸质签约仪式&#xff0c;平板现场电子签约的形式更加的新颖、更富有科技感、更具有仪式感。 平板签约投屏是应用于会议签字仪式的…

【NGINX--12】性能调优

1、使用压测工具实现测试自动化 需要使用压测工具实现测试自动化&#xff0c;以确保测试一致性和可重复性。 使用 HTTP 压测工具&#xff0c;例如 Apache Jmeter、Locust、Gatling 或团队标准化的任何测试工具。为压测工具创建配置&#xff0c;对您的 Web 应用做全面测试&…

【C语言】static 和 extern 的理解和应用。

对于 C 语言的初学者&#xff0c;对 static 和 extern 的理解可能会遇到一些问题。 用在哪&#xff1f; 首先明确 static 和 extern 可以用在哪&#xff1f; static 和 extern 都可以用来修饰【变量】和【函数】。ok&#xff0c;知道这么多就行了&#xff0c;所谓实践出真知&…

【Unity动画】为一个动画片段添加事件Events

动画不管播放到那一帧&#xff0c;我们都可以在这里“埋伏”一个事件&#xff08;调用一个函数并且给函数传递一个参数&#xff0c;参数在外部设置&#xff0c;甚至传递一个物体&#xff09;&#xff01; 嗨&#xff0c;亲爱的Unity小伙伴们&#xff01;你是否曾想过为你的动画…

常用性能工具与性能分析

iperf3 iperf3是一个用于测量网络带宽和性能的工具。它支持客户端-服务器模式&#xff0c;通过在客户端和服务器之间进行数据传输来评估网络的吞吐量、延迟和丢包率等指标。 iperf3的基本使用方法&#xff1a; 1. 安装iperf3&#xff1a; 首先&#xff0c;你需要在客户端和…

WPF halcon 机器视觉

1 鼹鼠的故事第14集 鼹鼠与智能房 鼹鼠无意中坐进了一辆小汽车&#xff0c;小汽车开进了一所智能住宅。鼹鼠看到房主在智能房里&#xff0c;享受着现代化的服务。趁着主人看电视的时候&#xff0c;鼹鼠也享用了一顿丰盛的智能晚餐。 小编大胆的畅想&#xff0c;这些食物 前一秒…

创建conan包-打包现有二进制文件

创建conan包-打包现有二进制文件 1 Packaging Existing Binaries1.1 Packaging Pre-built Binaries1.2 Downloading and Packaging Pre-built Binaries 本文是基于对conan官方文档Packaging Existing Binaries翻译而来&#xff0c; 更详细的信息可以去查阅conan官方文档。 1 P…

Ubuntu开机出现Welcome to emergency mode解决办法

问题描述 笔记本电脑安装了windows 10和ubuntu 16.04双系统&#xff0c;windows系统关机时按电源键强制关机&#xff0c;再次开机进入Ubuntu系统时无法进入图形界面&#xff0c;出现Welcome to emergency mode。 问题分析 异常关机导致文件系统受损&#xff0c;依据提示使用…

上传文件获得下载链接方法:直链!直链!

&#xff01;非 百度网盘 不是直接用网盘下载&#xff0c;要用直链&#xff0c;百度上有很多方法。 我自己研究了个&#xff0c;跳过百度网盘输密码进网页的方法 还是先还是要把文件上传网盘让后搜索网盘获取直链的方法&#xff08;那百度网盘举例&#xff09; 地址 https:…

数据结构:字典树(前缀树,Trie树),压缩字典树(Radix)

字典树Trie Tree 字典树也称前缀树&#xff0c;Trie树。在 Elasticsearch 的倒排索引中用的也是 Trie 树。是一种针对字符串进行维护的数据结构。 字典树是对词典的一种存储方式&#xff0c;这个词典中的每个“单词”就是从根节点出发一直到某一个目标节点的路径&#xff0c;…

<JavaEE> 多线程编程中的“等待和通知机制”:wait 和 notify 方法

目录 一、等待和通知机制的概念 二、wait() 方法 2.1 wait() 方法的使用 2.2 超时等待 2.3 异常唤醒 2.4 唤醒等待的方法 三、notify() 方法 四、notifyAll() 方法 五、wait 和 sleep 的对比 一、等待和通知机制的概念 1&#xff09;什么是等待和通知机制&#xff1f…

EM32DX-E4【C#】

1外观&#xff1a; ecat总线&#xff0c;分布式io 2电源&#xff1a; 靠近SW拨码&#xff1a;24V 中间&#xff1a;0V 靠近面板&#xff1a;PE接地 3DI&#xff1a; 6000H DI输入寄存器 16-bit &#xff08;16位输入&#xff09; 00H U8 子索引总数 01H Unsigned16 IN1…

事务管理 springboot

事务是一组操作的集合 它是一个不可分割的工作单位 这些操作 要么同时成功要么同时失败 Spring事务管理 #Spring事务管理日志 logging: level: org.springframework.jdbc.support.JdbcTransactionManager: debug

【深度学习】回归模型相关重要知识点总结

回归分析为许多机器学习算法提供了坚实的基础。在这篇文章中&#xff0c;我们将总结 10 个重要的回归问题和5个重要的回归问题的评价指标。 一、线性回归的假设是什么 线性回归有四个假设&#xff1a; 线性&#xff1a;自变量&#xff08;x&#xff09;和因变量&#xff08;y&…

JWT 认证机制

1. Session 认证的局限性 Session 认证机制需要配合 Cookie 才能实现。由于 Cookie 默认不支持跨域访问&#xff0c;所以&#xff0c;当涉及到前端跨域请求后端按口的时候&#xff0c;需要做很多额外的配置&#xff0c;才能实现跨域 Session 认证。 注意&#xff1a; 1&#xf…

CoreDNS实战(一)-构建高性能、插件化的DNS服务器

1 概述 在企业高可用DNS架构部署方案中我们使用的是传统老牌DNS软件Bind, 但是现在不少企业内部流行容器化部署&#xff0c;所以也可以将Bind替换为 CoreDNS &#xff0c;由于 CoreDNS 是 Kubernetes 的一个重要组件&#xff0c;稳定性不必担心&#xff0c;于此同时还可将K8S集…