二叉树中的最大路径和
给定一个非空二叉树,返回其最大路径和。
本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
- 示例 1:
输入: [1,2,3]1/ \2 3输出: 6
- 示例 2:
输入: [-10,9,20,null,null,15,7]-10/ \9 20/ \15 7输出: 42
来源:力扣(LeetCode)
- 思路
求出每一个点的最大贡献。当节点是叶子节点的时候,最大贡献就是val
的值,最大和的值为叶子节点值和最大和初始值的最大的一个考虑;当节点有子节点的时候,则节点最大贡献为节点val
加上左右节点最大贡献的最大值,最大和为左右节点最大贡献加上该节点val
值与全局最大和相比较的最大值。 - c++
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {private:int maxSum = INT_MIN;
public:int maxGain(TreeNode *node) {if (node == NULL) {return 0;}int maxLeft = max(maxGain(node->left), 0);int maxRight = max(maxGain(node->right), 0);int p = node->val + maxLeft + maxRight;maxSum = max(maxSum, p);return node->val + max(maxLeft, maxRight);}int maxPathSum(TreeNode* root) {maxGain(root);return maxSum;}
};
- go
/*** Definition for a binary tree node.* type TreeNode struct {* Val int* Left *TreeNode* Right *TreeNode* }*/
func maxPathSum(root *TreeNode) int {maxSum := math.MinInt32var maxGain func(*TreeNode) intmaxGain = func(node *TreeNode) int {if node == nil {return 0}maxLeft := max(maxGain(node.Left), 0)maxRight := max(maxGain(node.Right), 0)p := node.Val + maxLeft + maxRightmaxSum = max(maxSum, p)return node.Val + max(maxLeft, maxRight)}maxGain(root)return maxSum
}func max(a, b int) int {if a > b {return a}return b
}
- python
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = Noneclass Solution(object):def __init__(self):self.maxSum = float('-inf')def maxPathSum(self, root):""":type root: TreeNode:rtype: int"""def maxGain(self, node):if not node:return 0maxLeft = max(maxGain(self, node.left), 0)maxRight = max(maxGain(self, node.right), 0)p = node.val + maxLeft + maxRightself.maxSum = max(self.maxSum, p)return node.val + max(maxLeft, maxRight)maxGain(self, root)return self.maxSum
二叉树中的最大路径和相关推荐
- 124. Binary Tree Maximum Path Sum 二叉树中的最大路径和
Title 给定一个非空二叉树,返回其最大路径和. 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列.该路径至少包含一个节点,且不一定经过根节点. 示例 1: 输入: [1,2,3] 1 ...
- Leetcode 124.二叉树中的最大路径和
124.二叉树中的最大路径和 给定一个非空二叉树,返回其最大路径和. 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列.该路径至少包含一个节点,且不一定经过根节点. 示例 1: 输入: ...
- NC6 二叉树中的最大路径和
这里写自定义目录标题 题目描述 思路 递归 题目描述 寻找二叉树中从任意节点开始的最大不重复路径和 示例: 输入:{1,2,3} 输出:6 原题链接:NC6 二叉树中的最大路径和 思路 拿到这道题第一 ...
- [LeetCode]124. 二叉树中的最大路径和(java实现)递归
[LeetCode]124. 二叉树中的最大路径和(java实现)递归 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算法思想 6. 总 ...
- Java实现 LeetCode 124 二叉树中的最大路径和
124. 二叉树中的最大路径和 给定一个非空二叉树,返回其最大路径和. 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列.该路径至少包含一个节点,且不一定经过根节点. 示例 1: 输入: ...
- 124. 二叉树中的最大路径和
124. 二叉树中的最大路径和: 题目链接 :124. 二叉树中的最大路径和 题目: 路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列.同一个节点在一条路径序列中 至多出 ...
- LeetCode实战:二叉树中的最大路径和
背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Given a non ...
- 算法-二叉树中的最大路径和
题目: 路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列.同一个节点在一条路径序列中 至多出现一次 .该路径 至少包含一个 节点,且不一定经过根节点. 路径和 是路径中各 ...
- 二叉树中的最大路径和—leetcode124
给定一个非空二叉树,返回其最大路径和. 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列.该路径至少包含一个节点,且不一定经过根节点. 示例 1: 输入: [1,2,3] 1 ...
- leetcode-- 124. 二叉树中的最大路径和
给定一个非空二叉树,返回其最大路径和. 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列.该路径至少包含一个节点,且不一定经过根节点. 示例 1: 输入: [1,2,3]1/ \2 3输 ...
最新文章
- canvas笔记-canvas适应浏览器(填充整个页面)
- 字符串处理 —— 回文串相关 —— 回文串的判断
- C++ 集成和派生练习题解答
- HDFS : RemoteException Operation category READ is not supported in state standby.
- 甘肃省智慧教育云平台实名认证_“好分数”甘肃行,人工智能助力教育均衡
- 再论:男人有多大责任和感恩代表着有多大的驾驭能力和事业能力
- linux下加载ISO镜像的方法
- spring集成shiro原理
- 聊聊小世界网络和癌症
- hdu4565(矩阵快速幂)
- avformat_seek_file函数介绍
- mysql中dml全称是什么_MySQL中的DML、DDL、DCL是什么意思
- 抛物线交点式公式_抛物线所有公式,抛物线是什么意思
- Tableau:与Python集成
- PSMN4R8-100BSE MOSFET管 N-CH 100V D2PAK
- Derek Wilson:三重缓冲,为什么我们爱它
- 判断当前浏览器是否为IE11
- “百度杯”CTF比赛 十月场 - 考眼力
- 特征选择(过滤法、包装法、嵌入法)
- 穿(string类的运用)