1、题目描述
输入一棵二叉树,求这课二叉树所有路径中最大的路径和。比如输入二叉树为:[-10,9,20,null,null,15,7],输出:42。
2、解题思路
我们知道,给定一个数组,求这个数组的连续子数组的最大和是比较容易的。而这道题目是将二叉树与连续子数组的最大和糅合在一起。因此我们需要在递归中求出二叉树路径的连续子数组的最大和。因此,在二叉树的递归函数中,输入一个节点,我们需要求出以这个节点为根的二叉树的连续子数组的最大和。递归函数进行如下判断:
- 如果节点的左子树和右子树为空,那么连续子数组的最大和为这个节点值。
- 如果左子树不为空,那么遍历左子树,求出以左子树为根的树中连续子数组的最大和。
- 如果右子树不为空,那么遍历右子树,求出以右子树为根的树中连续子数组的最大和。
- 接着对从左子树最大和、右子树最大和、节点值、左子树最大和 + 节点值、右子树最大和 + 节点值、左子树+右子树+节点值中取出最大的保存即可。
int maxPathSum(TreeNode* root) {
if(root==nullptr)
return 0;
int sum = 0;
int max_len = root->val;
max_path(root,max_len,sum);
ret