二叉树中的最大路径和

Posted vector6_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树中的最大路径和相关的知识,希望对你有一定的参考价值。

二叉树中的最大路径和

路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。

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

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

/**
 * 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) 
 * ;
 */
//整体上由于从上向下遍历->从下向上计算和,所有是二叉树后序遍历的框架。
//先计算左右子树的最大和,然后因为最大路径可能为left+curNode+right ,所以计算该值并更新最大路径和
//每个节点的值是单边的最大值+curnode,即左右子节点较大值+curnode,因为上面我们计算最大路径的思路,要是这里不按单边算的话就无法跟父节点连成一条线了。
#include<math.h>
#include<algorithm>
using namespace std;
class Solution 
public:
    int ans = INT_MIN;
    int maxPathSum(TreeNode* root) 
        if(root == nullptr)
            return 0;
        
        maxPathSumHelper(root);
        return ans;
    
    int maxPathSumHelper(TreeNode* root)
    
        if(root == nullptr)
            return 0;
        int leftMax = max(0,maxPathSumHelper(root->left));
        int rightMax = max(0,maxPathSumHelper(root->right));
        int subMax = leftMax+rightMax+root->val;				//最大路径可能为left+curNode+right ,所以计算该值并更新最大路径和
        ans = max(ans, subMax);
        return (max(leftMax, rightMax) + root->val);			//每个节点的值是单边的最大值+curnode,即左右子节点较大值+curnode
    
;

以上是关于二叉树中的最大路径和的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 给定二叉树,找到最大路径总和。路径可以在树中的任何节点处开始和结束。

leetcode 124. 二叉树中的最大路径和

leetcode困难124二叉树中的最大路径和

leetcode——124. 二叉树中的最大路径和

二叉树中的最大路径和

二叉树中的最大和路径