面试算法51:节点值之和最大的路径

题目

在二叉树中将路径定义为顺着节点之间的连接从任意一个节点开始到达任意一个节点所经过的所有节点。路径中至少包含一个节点,不一定经过二叉树的根节点,也不一定经过叶节点。给定非空的一棵二叉树,请求出二叉树所有路径上节点值之和的最大值。例如,在如图8.6所示的二叉树中,从节点15开始经过节点20到达节点7的路径的节点值之和为42,是节点值之和最大的路径。
在这里插入图片描述

分析

这个题目中二叉树路径的定义又和前面的不同。这里的路径最主要的特点是路径有可能同时经过一个节点的左右子节点。例如,在图8.6中,一条路径可以经过节点15、节点20和节点7,即节点20的左子节点15和右子节点7同时在一条路径上。当然,路径也可以不同时经过一个节点的左右子节点。例如,在图8.6中,一条路径可以经过节点-9、节点20、节点15和节点-3。

也就是说,当路径到达某个节点时,该路径既可以前往它的左子树,也可以前往它的右子树。但如果路径同时经过它的左右子树,那么就不能经过它的父节点。

由于路径可能只经过左子树或右子树而不经过根节点,为了求得二叉树的路径上节点值之和的最大值,需要先求出左右子树中路径节点值之和的最大值(左右子树中的路径不经过当前节点),再求出经过根节点的路径节点值之和的最大值,最后对三者进行比较得到最大值。由于需要先求出左右子树的路径节点值之和的最大值,再求根节点,这看起来就是后序遍历。

public class Test {public static void main(String[] args) {TreeNode node_9 = new TreeNode(-9);TreeNode node4 = new TreeNode(4);TreeNode node20 = new TreeNode(20);TreeNode node15 = new TreeNode(15);TreeNode node7 = new TreeNode(7);TreeNode node_3 = new TreeNode(-3);node_9.left = node4;node_9.right = node20;node20.left = node15;node20.right = node7;node15.left = node_3;int result = maxPathSum(node_9);System.out.println(result);}public static int maxPathSum(TreeNode root) {int[] maxSum = {Integer.MIN_VALUE};dfs(root, maxSum);return maxSum[0];}private static int dfs(TreeNode root, int[] maxSum) {if (root == null) {return 0;}int[] maxSumLeft = {Integer.MIN_VALUE};int left = Math.max(0, dfs(root.left, maxSumLeft));int[] maxSumRight = {Integer.MIN_VALUE};int right = Math.max(0, dfs(root.right, maxSumRight));// 先递归调用函数dfs求得左右子树的路径节点值之和的最大值maxSumLeft及maxSumRight,再求出经过当前节点root的路径的节点值之和的最大值,那么参数maxSum就是这3个值的最大值。maxSum[0] = Math.max(maxSumLeft[0], maxSumRight[0]);maxSum[0] = Math.max(maxSum[0], root.val + left + right);// 先,left代表左树,right代表右树return root.val + Math.max(left, right);// 后,是子树的行为,不是本身这个节点的行为}
}

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

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

相关文章

分体式离子风刀和整体式离子风刀分别有哪些优缺点

离子风刀是一种利用高速旋转的离子风扇产生的离子风来清洁和干燥物体表面的设备。根据离子风扇的安装方式,离子风刀可以分为分体式离子风刀和整体式离子风刀。下面是它们各自的优缺点: 分体式离子风刀的优点: 安装方便:分体式离子…

电压放大器可用于什么场合

电压放大器是电子器件中常见的一种放大器类型,它可以将输入信号的电压放大到更大的幅度,以满足特定应用的需求。电压放大器广泛应用于多个领域和场合,下面将详细介绍一些使用电压放大器的场景。 音频放大器:音频放大器是电压放大器…

(1)(1.11) LeddarTech Leddar One

文章目录 前言 1 连接到自动驾驶仪 2 参数说明 前言 Leddar One 激光雷达(Leddar One Lidar)是一款重量轻、价格合理的激光雷达,测距 40m,更新频率 70hz,光束为 3 度漫射。有关详细信息,请参阅数据表(datasheet)。 &#xff0…

2023-11-03 LeetCode每日一题(填充每个节点的下一个右侧节点指针 II)

2023-11-03每日一题 一、题目编号 117. 填充每个节点的下一个右侧节点指针 II二、题目链接 点击跳转到题目位置 三、题目描述 给定一个二叉树: struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针…

ArcGIS Pro怎么生成高程点

一般情况下,我们从公开渠道获取到的高程数据都是DEM数据,但是如果要用到CAD等软件内则需要用到高程点,那么如何从DEM提取高程点呢,这里为大家介绍一下生成方法,希望能对你有所帮助。 数据来源 本教程所使用的数据是…

喝酒聚会摇色子小程序源码系统+石头剪刀布+大转盘 带完整的部署教程

来咯来咯,大家都知道摇色子是一种古老而受欢迎的饮酒游戏。在当代年轻人的聚会中,常常都使用摇骰子这种方法来喝酒的。今天罗峰要给大家介绍是一款非常受欢迎的小程序源码系统喝酒聚会摇色子小程序源码系统,还有石头剪刀布,大转盘…

怎么让重要文件自动备份到OneDrive?

可以让文件自动备份到OneDrive吗? OneDrive是比较受欢迎的云存储之一,主要用于存储文件和个人数据,随时随地都能够在多个设备(例如Android、台式机或笔记本电脑、平板电脑等)之间同步和共享文件。 因此&…

SSL证书在网购中的重要性

近年来,互联网的快速发展使得线上服务范围不断延伸,这其中网络购物更是在全球范围内都呈现上升趋势。然而病毒攻击,网络钓鱼攻击和恶意软件攻击无处不在,网上购物的安全性受到极大威胁。为了保护网络购物的安全,构建可…

Vue项目运行时报错:‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件

报错原因及解决 1.package.json 文件中未定义依赖项vue/cli-service,因此在 npm install 之后并没有安装vue/cli-service 依赖; 解决:项目目录下执行命令,npm i -D vue/cli-service。2.第1步排查后,还是报同样的错&a…

【腾讯云HAI域探秘】利用HAI搭建AI绘画应用,随心所欲,畅享创作乐趣

【腾讯云HAI域探秘】利用HAI搭建AI绘画应用,随心所欲,畅享创作乐趣 1️⃣基于HAI部署的StableDiffusionWebUI快速进行AI绘画(1)创建并启动StableDiffusion应用服务器(2)使用StableDiffusionWebUI进行AI绘画…

Dubbo中的负载均衡算法之一致性哈希算法

Dubbo中的负载均衡算法之一致性哈希算法 哈希算法 假设这样一个场景,我们申请一台服务器来缓存100万的数据,这个时候是单机环境,所有的请求都命中到这台服务器。后来业务量上涨,我们的数据也从100万上升到了300万,原…

【蓝桥每日一题]-二分精确(保姆级教程 篇4) #kotori的设备 #银行贷款 #一元三次方程求解

今天讲二分精确题型 目录 题目:kotori的设备 思路: 题目:银行贷款 思路: 题目:一元三次方程求解 思路: 题目:kotori的设备 思路: 求:设备最长使用时间 二分查找&#…

数据结构(超详细讲解!!)第十九节 块链串及串的应用

1.定义 由于串也是一种线性表,因此也可以采用链式存储。由于串的特殊性(每个元素只有一个字符),在具体实现时,每个结点既可以存放一个字符,也可以存放多个字符。每个结点称为块,整个链表称为块链…

C# 发送邮件

1.安装 NuGet 包 2.代码如下 SendMailUtil using MimeKit; using Srm.CMER.Application.Contracts.CmerInfo; namespace Srm.Mail { public class SendMailUtil { public async static Task<string> SendEmail(SendEmialDto sendEmialDto,List<strin…

DC系列 DC:3

DC系列 DC:3 文章目录 DC系列 DC:3调试靶机信息收集IP端口信息收集 框架漏洞利用joomscan扫描工具利用msf工具利用(无法使用)kali漏洞库利用sqlmap利用 文件上传提权 调试靶机 点击虚拟机设置选择CD/DVD点击高级将IDE调成画面中这个选项 信息收集 IP端口信息收集 对自己网…

DI93a HESG440355R3 通过其Achilles级认证提供网络安全

DI93a HESG440355R3 通过其Achilles级认证提供网络安全 施耐德电气宣布推出Modicon M580以太网PAC (ePAC)自动化控制器&#xff0c;该控制器采用开放式以太网标准&#xff0c;通过其Achilles级认证提供网络安全。M580 ePAC使工厂操作员能够设计、实施和运行一个积极利用开放网…

量子计算与量子密码(入门级-少图版)

量子计算与量子密码 写在最前面一些可能带来的有趣的知识和潜在的收获 1、Introduction导言四个特性不确定性&#xff08;自由意志论&#xff09;Indeterminism不确定性Uncertainty叠加原理(线性)superposition (linearity)纠缠entanglement 虚数的常见基本运算欧拉公式&#x…

nodejs国内镜像及切换版本工具nvm

淘宝 NPM 镜像站&#xff08;http://npm.taobao.org&#xff09;已更换域名&#xff0c;新域名&#xff1a; Web 站点&#xff1a;https://npmmirror.com Registry Endpoint&#xff1a;https://registry.npmmirror.com 详见&#xff1a; 【望周知】淘宝 NPM 镜像换域名了&…

java基础--多线程学习

写在前面&#xff1a; 多线程在面试中问的很多&#xff0c;之前没有过系统的学习&#xff0c;现在来进行一个系统的总结学习 文章目录 基础java多线程实现无参无返回值线程快速创建start和run方法的探讨run方法线程状态 有返回值线程线程池执行小结关于抛出异常的扩展 线程方…

CLion 2023.2.2(C ++ IDE智能代码编辑器)

CLion 2023是一款跨平台C/C集成开发环境&#xff08;IDE&#xff09;。它为Mac用户提供了高效的编程体验&#xff0c;帮助程序员们在Mac平台上进行C/C开发。 CLion 2023支持多种编译器和调试器&#xff0c;并具有强大的代码分析和导航功能。它还为用户提供了许多便捷的工具和插…