vlambda博客
学习文章列表

二叉树中的最大路径和

二叉树的学习001

肚子好饿啊~大家饿了吗~~好久不见~~大家快重新回来刷题学习了~~

 

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

 

给定一个非空二叉树,返回其最大路径和。

本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。

示例 1:

输入: [1,2,3]

 

       1

      / \

     2  3

 

输出: 6

示例 2:

输入: [-10,9,20,null,null,15,7]

 

   -10

   / \

  9  20

    /  \

   15   7

 

输出: 42

 此题比较典型,g_ans是计算更新某个节点+左右子树最大路径和  的最大值


MaxPath计算单子树的路径和。


/**

 * 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 {

public:

    int g_ans = -1000000;

    int MaxPath(TreeNode* root)

    {

        if (root == nullptr) {

            return 0;

        }

        int left = max(0MaxPath(root->left));

        int right = max(0MaxPath(root->right));

        // 当前节点的最大路径和取决于该节点的值与该节点的左右子节点的最大路径  

        g_ans = max(g_ans, left + right + root->val); 

 

        return max(left, right) + root->val; // 返回单侧路径的最大值

    }

 

    int maxPathSum(TreeNode* root) {

        if (root == nullptr)

            return 0;

        MaxPath(root);

        return g_ans;

    }

};