Leetcode 二叉树最大内部路径长度

题目描述

给定一个二叉树,请计算节点值之和最大的路径的节点值之和是多少。

这个路径的开始节点和结束节点可以是二叉树中的任意节点

例如:

给出以下的二叉树,

       1↵      / ↵     2   3

返回的结果为6

 

思路:和最长连续子序列一样  采用maxValue记录中间出现的长度 不断更新

注意:最长的路径长度包含两大类  即:  1 其子树中的最大路径长度  2 经过根节点的最大路径长度

设置函数 dfs(Node* root)  返回root到其内部一个节点的最大路径长度

class Solution {
public:

    int maxValue=-100000;//最大值
    int maxPathSum(TreeNode* root) {
        // write code here
      if(root==NULL)
          return 0;
        
        DFS(root);
        return maxValue;

    }
    
    int DFS(TreeNode* root) //返回从根节点到其一个子节点路径中最大值
    {
        if(root==NULL)
            return 0;
       int left=max(0,DFS(root->left));
       int right=max(0,DFS(root->right));//左右子树  可能存在负值
        maxValue=max(maxValue,left+right+root->val);
        //这里由于是递归返回过程  所以上一次的maxValue是其子树中的最大路径长度  再与经过当前root节点的路径长度  比较取较大值即可
        
        return max(left+root->val,right+root->val);//返回最大值
    }

    
};

 

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术工厂 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读