我的编程空间,编程开发者的网络收藏夹
学习永远不晚

算法---二叉树中的最大路径和

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

算法---二叉树中的最大路径和

题目

二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。

路径和 是路径中各节点值的总和。

给你一个二叉树的根节点 root ,返回其 最大路径和 。

示例 1:
在这里插入图片描述

输入:root = [1,2,3]
输出:6
解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6
示例 2:

在这里插入图片描述

输入:root = [-10,9,20,null,null,15,7]
输出:42
解释:最优路径是 15 -> 20 -> 7 ,路径和为 15 + 20 + 7 = 42

提示:

树中节点数目范围是 [1, 3 * 104]
-1000 <= Node.val <= 1000

解决思路

解决方法

    private var finalMax = Int.MIN_VALUE    fun maxPathSum(root: TreeNode?): Int {        dfs(root)        return finalMax    }    fun dfs(root: TreeNode?): Int {        if (root == null) {            return 0        }        //左右两个子节点贡献值最小为0 如果是负数那么就直接不归属,相当于取0        val maxLeft = dfs(root.left).coerceAtLeast(0)        val maxRight = dfs(root.right).coerceAtLeast(0)        var max = (maxRight + root.`val`).coerceAtLeast(maxLeft + root.`val`)        //当前节点当作整个路径的最大值计算一下        finalMax = finalMax.coerceAtLeast(maxLeft + maxRight + root.`val`)        //返回的max表示当前节点的最大贡献值        return max    }
核心是注意当前节点的最大路径,与当前节点作为子节点时的贡献是两个不同的值当前节点的最大路径: max(自己,自己+左边,自己+右边,自己 + 左边 + 右边)当前节点作为子节点时的贡献:max(自己,自己+左边,自己+右边)后者相对前者,少了左右都存在的情况。因为作为子节点时,一条路如果同时包含左右,根就被包含了2次,不符合题目只出现一次的限制了。

总结

最近有些懈怠了,人还是需要鞭策的。
不然总是耗费大量时间玩游戏就不好了

这道题说难也不难,只是当时自己没有完全想明白咋回事。
还是看了题解做出来了。

才思泉涌的人,让我见个吧。真没见过多聪明的人。
高斯,爱因斯坦这种

人上了年纪,真的会又些好吃的没法吃了。
因为会掉牙。真咬不动。
切记古人的忠告:树欲停 而风不止 子欲养 而亲不待
父母恩情其实基本上儿女是回报不了的
父母把全部心血给了自己
自己成为父母后却不能把全部心血还给父母
因为还要培养下一代
就这样 恩情在一代代流传 ​​​

来源地址:https://blog.csdn.net/u013270444/article/details/132556706

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

算法---二叉树中的最大路径和

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

算法---二叉树中的最大路径和

题目 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 roo
2023-08-30

C++怎么求二叉树的最大路径和

本篇内容主要讲解“C++怎么求二叉树的最大路径和”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++怎么求二叉树的最大路径和”吧!求二叉树的最大路径和Given a non-empty bina
2023-06-20

Java算法中二叉树的练习题有哪些

小编给大家分享一下Java算法中二叉树的练习题有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!题目一 解法/** * Definition for a bin
2023-06-29

JavaMorris遍历算法及其在二叉树中的应用

Morris遍历是一种基于线索二叉树的遍历算法,可以在不使用栈或递归的情况下,实现二叉树的前序、中序和后序遍历。该算法利用二叉树中的空指针或线索指针,将遍历序列嵌入到原二叉树中,实现了常数级别的空间复杂度,适用于对空间要求较高的场景
2023-05-18

java二叉树中数据插入算法的示例分析

这篇文章主要介绍java二叉树中数据插入算法的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!例题:leetcode 第701题二叉树插入数据题目:给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉
2023-06-22

怎么利用go语言实现查找二叉树中的最大宽度

这篇文章主要介绍“怎么利用go语言实现查找二叉树中的最大宽度”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么利用go语言实现查找二叉树中的最大宽度”文章能帮助大家解决问题。介绍这道题是这样的,有一
2023-06-30

Python利用前序和中序遍历结果重建二叉树的方法

本文实例讲述了Python利用前序和中序遍历结果重建二叉树的方法。分享给大家供大家参考,具体如下: 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 这道题比较容易,前序
2022-06-04

编程热搜

目录