LeetCodehot 力扣热题100

class Solution {
public:int max_sum = INT_MIN;  // 初始化为最小值,确保能够处理所有可能的路径和int maxPathSum(TreeNode* root) {dfs(root);return max_sum;}int dfs(TreeNode* root) {if (root == nullptr) return 0;  // 如果是空节点,返回0// 递归计算左子树和右子树的最大路径和,负值则不贡献路径和int left = max(0, dfs(root->left));  // 只考虑正路径int right = max(0, dfs(root->right));  // 只考虑正路径// 计算当前节点的最大路径和,包括根节点与左、右子树的路径max_sum = max(max_sum, root->val + left + right);// 返回当前节点的最大贡献值return root->val + max(left, right);  // 返回当前节点的最大路径和(要么包括左子树,要么右子树)}
};

路径上的节点最多有两个相邻节点。

好的,接下来我会详细解析你之前提到的 二叉树最大路径和 代码的思路。

问题说明

最大路径和问题的目标是:在一个二叉树中找到一条路径,使得路径上的节点值的和最大。这条路径可以通过任意节点,不需要从根节点开始,并且路径可以穿越树的多个分支。

• max_sum 作为一个全局变量,用来存储二叉树中计算出来的最大路径和。初始化为 0,代表我们初始时尚未计算任何路径的和。

2. maxPathSum 函数

int maxPathSum(TreeNode* root) {

    dfs(root);  // 从根节点开始,递归计算最大路径和

    return max_sum;  // 返回最大路径和

}

• maxPathSum 是主要的接口函数,它接收二叉树的根节点 root 作为输入,调用 dfs 函数计算路径和。

• 调用 dfs(root) 会触发对整个树的深度优先搜索。

• 最后返回 max_sum,这个变量会保存二叉树中遍历得到的最大路径和。

3. 深度优先搜索 dfs 函数

int dfs(TreeNode* root) {

    if (root == nullptr) return 0;  // 递归边界:如果节点为空,路径和为0

• dfs 是一个递归函数,负责从当前节点计算出其左右子树的路径和,并更新 max_sum。

• 如果当前节点是 nullptr(即为空节点),直接返回 0,因为空节点对路径和没有任何贡献。

int left = max(0, dfs(root->left));  // 计算左子树的最大路径和,若为负数则不贡献,返回0

int right = max(0, dfs(root->right));  // 计算右子树的最大路径和,若为负数则不贡献,返回0

• 计算当前节点的左子树和右子树的最大路径和。

• 对于每个子树,我们希望只考虑正路径和(即如果某个子树的路径和是负数,那么我们就不考虑这条路径)。因此,使用 max(0, dfs(...)) 来确保如果子树的路径和为负数,则返回 0,表示我们不选取该子树。

• dfs(root->left) 和 dfs(root->right) 分别递归地计算左子树和右子树的最大路径和。

max_sum = max(max_sum, root->val + left + right);  // 以当前节点为根的路径和

• 现在我们计算的是通过当前节点 root 的路径和,这个路径包括:

• 当前节点的值 root->val

• 左子树的最大路径和 left

• 右子树的最大路径和 right

• max_sum 会更新为当前路径和和之前的最大路径和中的较大值。

return root->val + max(left, right);  // 返回当前节点的最大路径和

• 由于路径不能跨越多个分支,因此我们只能选择单边(左子树或右子树)继续延伸路径。返回当前节点的最大路径和时,我们只选择左子树和右子树中的较大者:

• root->val + max(left, right) 表示包括当前节点和其较大子树路径和的最大路径和。

4. 递归的执行流程

• 从根节点开始递归。

• 对于每个节点:

• 计算左右子树的最大路径和(递归调用 dfs)。

• 更新全局变量 max_sum。

• 返回当前节点的最大路径贡献(选择左子树或右子树的较大路径)。

• 最终 max_sum 就包含了整棵树的最大路径和。

代码执行流程(示例)

假设有以下二叉树:

       1

      / \

     2   3

    / \

   4   5

1. 调用 maxPathSum(root),根节点是 1:

• 进入 dfs(1)。

2. dfs(1):

• 左子树是 2,右子树是 3,开始计算左右子树的路径和。

3. 计算 dfs(2)(左子树):

• 左子树是 4,右子树是 5,继续递归。

4. 计算 dfs(4):

• 节点 4 没有子树,返回 4。

5. 计算 dfs(5):

• 节点 5 没有子树,返回 5。

6. 计算 dfs(2):

• left = 4,right = 5,节点 2 的路径和是 2 + 4 + 5 = 11。

• 更新 max_sum = 11。

• 返回 2 + max(4, 5) = 7。

7. 计算 dfs(3)(右子树):

• 节点 3 没有子树,返回 3。

8. 计算 dfs(1)(根节点):

• left = 7,right = 3,节点 1 的路径和是 1 + 7 + 3 = 11,max_sum 不变。

• 返回 1 + max(7, 3) = 8。

9. 最终结果:

• max_sum = 11,即树中的最大路径和是 4 -> 2 -> 5 或 4 -> 2 -> 1 -> 3。

总结

1. 深度优先搜索:通过递归遍历树中的每个节点,计算以每个节点为根的最大路径和。

2. 路径和的更新:对于每个节点,计算包括其左右子树的路径和,并更新全局最大路径和 max_sum。

3. 递归的返回值:每个节点返回的路径和代表它向上回溯的贡献,它是当前节点值与左、右子树最大路径和中的较大者之和。

这种方法的时间复杂度是 O(n),其中 n 是二叉树的节点数,因为每个节点只会被访问一次。

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

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

相关文章

第4章 信息系统架构(二)

4.2 系统架构 信息系统架构是一种体系结构,它反映了一个组织信息系统的各个组成部分之间的关系,以及信息系统与相关业务、信息系统与相关技术之间的关系。 4.2.1 架构定义 对于大规模的复杂系统来说,对总体的系统结构设计比起对计算算法和…

AI 时代:探索大语言模型与核心技术

引言 在当今科技快速发展的时代,人工智能(AI)正成为推动创新和变革的重要力量。从能够理解和生成自然语言的大语言模型(LLM),到具有自我学习能力的生成式预训练转换器(GPT)&#xf…

Python----数据结构(单链表:节点,是否为空,长度,遍历,添加,删除,查找)

一、链表 链表是一种线性数据结构,由一系列按特定顺序排列的节点组成,这些节点通过指针相互连接。每个节点包含两部分:元素和指向下一个节点的指针。其中,最简单的形式是单向链表,每个节点含有一个信息域和一个指针域&…

10、k8s对外服务之ingress

service和ingress的作用 service的作用 NodePort:会在每个节点开放一个端口,端口号30000-32767。 也是只能用于内网访问,四层转发。实现负载均衡。不能基于域名进行访问。 clusterip:service的默认类型,只能在集群…

Linux-ubuntu系统移植之Uboot启动流程

Linux-ubuntu系统移植之Uboot启动流程 一,Uboot启动流程1.Uboot的两阶段1.1.第一阶段1.11.硬件初始化1.12.复制 U-Boot 到 RAM1.13.跳转到第二阶段 1.2.第二阶段1.21.C 语言环境初始化1.22. 硬件设备初始化1.23. 加载环境变量1.24. 显示启动信息1.25. 等待用户输入&…

H3C交换机路由器防火墙FTP/TFTP服务器搭建。

软件介绍。 3CDaemon 2.0 - Download 3CDaemon 是一款集成了多种网络服务功能的工具软件,主要用于网络管理和文件传输,支持TFTP、FTP、Syslog等多种协议,广泛应用于网络设备的配置和管理。 1. 主要功能 TFTP服务器:支持TFTP协议…

Docker Mysql 数据迁移

查看启动命令目录映射 查看容器名称 docker ps查看容器的启动命令 docker inspect mysql8.0 |grep CreateCommand -A 20如下图所示:我这边是把/var/lib/mysql 目录映射到我宿主机的/mnt/mysql/data目录下,而且我的数量比较大使用方法1的话时间比较久,所以我采用方法2 如果没…

[Windows] WPS 2024冬季更新版(版本号19770)

[Windows] WPS 2024冬季更新版 链接:https://pan.xunlei.com/s/VOJQrS4UCz5639Oan7pu1X84A1?pwdg8ad# WPS灵犀正式上线DeepSeek R1!告别服务器超时,办公效率飙升300%! 2025年2月14日,WPS官方宣布全面接入DeepSeek …

图解循环神经网络(RNN)

目录 1.循环神经网络介绍 2.网络结构 3.结构分类 4.模型工作原理 5.模型工作示例 6.总结 1.循环神经网络介绍 RNN(Recurrent Neural Network,循环神经网络)是一种专门用于处理序列数据的神经网络结构。与传统的神经网络不同&#xff0c…

【队列】循环队列(Circular Queue)详解

文章目录 一、循环队列简介二、循环队列的判空和判满三、循环队列的实现leetcode 622. 设计循环队列 一、循环队列简介 在实际开发中,队列是一种常用的数据结构,而循环队列(Circular Queue)则一般是一种基于数组实现的队列&#x…

vmware虚拟机Ubuntu Desktop系统怎么和我的电脑相互复制文件、内容

1、先安装vmware workstation 17 player,然后再安装Ubuntu Desktop虚拟机,然后再安装vmware tools,具体可以参考如下视频: VMware虚拟机与主机实现文件共享,其实一点也不难_哔哩哔哩_bilibili 2、本人亲自试过了&…

Netty入门详解

引言 Netty 是一个基于 Java 的高性能、异步事件驱动的网络应用框架,用于快速开发可维护的高性能网络服务器和客户端。它提供了一组丰富的 API,使得开发人员能够轻松地处理各种网络协议,如 TCP、UDP 等,并且支持多种编解码方式&a…

DeepSeek 助力 Vue 开发:打造丝滑的点击动画(Click Animations)

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…

Spring-GPT智谱清言AI项目(附源码)

一、项目介绍 本项目是Spring AI第三方调用整合智谱请言(官网是:https://open.bigmodel.cn)的案例,回答响应流式输出显示,这里使用的是免费模型,需要其他模型可以去 https://www.bigmodel.cn/pricing 切换…

DeepSeek智能测试知识库助手PRO版:多格式支持+性能优化

前言 测试工程师在管理测试资产时,需要面对多种文档格式、大量文件分类及知识库的构建任务。为了解决这些问题,我们升级了 DeepSeek智能测试知识库助手,不仅支持更多文档格式,还加入了 多线程并发处理 和 可扩展格式支持,大幅提升处理性能和灵活性。 主要功能亮点: 多格…

【Python游戏】双人简单对战游戏

以下是一个使用 Python 的 pygame 库实现的简单对战游戏示例,游戏中玩家可以控制两个角色进行对战,并且支持自定义图片(最好使用无底色的png图片)。完整源码以及实现思路: import pygame import os# 初始化 Pygame pygame.init()# 设置游戏窗…

邮件安全之发件人伪造

电子邮件工作原理 电子邮件传输过程中主要涉及到SMTP、IMAP、POP3三种协议,具体功能如下: SMTP:全称Simple Mail Transfer Protocol,即简单邮件传输协议,主要用于发送邮件,使用端口号25。 IMAP:全称Internet Mail Acce…

Ubuntu虚拟机NDK编译ffmpeg

目录 一、ffmpeg源码下载1、安装git(用于下载ffmpeg源码)2、创建源码目录,下载ffmpeg源码 二、下载ubuntu对应的NDK,并解压到opt下1、下载并解压2、配置 ~/.bashrc 三、源码编译、1、创建编译脚本2、脚本文件内容3、设置可执行权限并运行4、编译的结果在…

[展示]Webrtc NoiseSuppressor降噪模块嵌入式平台移植

最近在尝试把WebRtc的NoiseSuppressor模块移植到嵌入式平台,现在已经移植了,尝试了下效果,降噪效果很显著,噪声带被显著抑制了 降噪前: 降噪后:

适用于复杂背景的YOLOv8改进:基于DCN的特征提取能力提升研究

文章目录 1. YOLOv8的性能瓶颈与改进需求1.1 YOLOv8的优势与局限性1.2 可变形卷积(DCN)的优势 2. DCN在YOLOv8中的应用2.1 DCN的演变与YOLOv8的结合2.2 将DCN嵌入YOLOv8的结构中2.2.1 DCNv1在YOLOv8中的应用2.2.2 DCNv2与DCNv3的优化 2.3 实验与性能对比…