博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【LeetCode】124. Binary Tree Maximum Path Sum
阅读量:5116 次
发布时间:2019-06-13

本文共 2096 字,大约阅读时间需要 6 分钟。

Binary Tree Maximum Path Sum

Given a binary tree, find the maximum path sum.

The path may start and end at any node in the tree.

For example:

Given the below binary tree,

1      / \     2   3

 

Return 6.

 

树结构显然用递归来解,解题关键:

1、对于每一层递归,只有包含此层树根节点的值才可以返回到上层。否则路径将不连续。

2、返回的值最多为根节点加上左右子树中的一个返回值,而不能加上两个返回值。否则路径将分叉。

在这两个前提下有个需要注意的问题,最上层返回的值并不一定是满足要求的最大值,

因为最大值对应的路径不一定包含root的值,可能存在于某个子树上。

因此解决方案为设置全局变量maxSum,在递归过程中不断更新最大值。

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    int maxSum;    Solution()    {        maxSum = INT_MIN;    }    int maxPathSum(TreeNode* root)    {        Helper(root);        return maxSum;    }    int Helper(TreeNode *root) {        if(!root)            return INT_MIN;        else        {            int left = Helper(root->left);            int right = Helper(root->right);            if(root->val >= 0)            {
//allways include root if(left >= 0 && right >= 0) maxSum = max(maxSum, root->val+left+right); else if(left >= 0 && right < 0) maxSum = max(maxSum, root->val+left); else if(left < 0 && right >= 0) maxSum = max(maxSum, root->val+right); else maxSum = max(maxSum, root->val); } else { if(left >= 0 && right >= 0) maxSum = max(maxSum, max(root->val+left+right, max(left, right))); else if(left >= 0 && right < 0) maxSum = max(maxSum, left); else if(left < 0 && right >= 0) maxSum = max(maxSum, right); else maxSum = max(maxSum, max(root->val, max(left, right))); } //return only one path, do not add left and right at the same time return max(root->val+max(0, left), root->val+max(0, right)); } }};

转载于:https://www.cnblogs.com/ganganloveu/p/4126953.html

你可能感兴趣的文章
heX:用HTML5和Node.JS开发桌面应用
查看>>
使用 vs 2008 宏制作自动注释工具
查看>>
js 动态生成button 并设置click事件
查看>>
esxi忘记密码重置方法
查看>>
【java】@Transactional注解与事务
查看>>
EasyPR源码剖析(4):车牌定位之Sobel算子定位
查看>>
javaweb项目搭建ehcache缓存系统
查看>>
HTML5:一个拖拽网页元素的例子
查看>>
BZOJ 2169
查看>>
js+css3实现旋转效果
查看>>
html5的web存储详解
查看>>
感觉自己应该重新读一次Javascript
查看>>
最小化安装k8s
查看>>
多线程经典模型-生产者消费
查看>>
【最短路】Walls
查看>>
Python策略模式实现源码分享
查看>>
千氪|比特币十周年大事记
查看>>
SpringMVC学习系列-解决GET请求时中文乱码的问题
查看>>
工程师追查线上问题(或运维)常用的shell命令
查看>>
c语言中的scanf在java中应该怎么表达,Scanner类。
查看>>