给定一个二叉树,求二叉树从根节点到叶节点路径和最大值
时间: 2024-01-23 08:39:49 浏览: 78
可以使用递归的方法来解决该问题。对于每个节点,我们可以将它的值加上它左右子树中路径和最大的那个值,然后返回给它的父节点。对于叶节点,我们直接返回它的值。
具体实现如下:
```
class Solution {
public:
int maxPathSum(TreeNode* root) {
int maxSum = INT_MIN;
maxPathSum(root, maxSum);
return maxSum;
}
int maxPathSum(TreeNode* root, int& maxSum) {
if (!root) {
return 0;
}
int leftSum = max(0, maxPathSum(root->left, maxSum));
int rightSum = max(0, maxPathSum(root->right, maxSum));
maxSum = max(maxSum, root->val + leftSum + rightSum);
return root->val + max(leftSum, rightSum);
}
};
```
其中,maxPathSum函数用于求二叉树的最大路径和,maxPathSum函数用于递归求解每个节点的路径和,并更新maxSum。当节点为空时,返回0;当节点为叶节点时,返回节点值;否则,分别递归求解左右子树的路径和,并取大于等于0的值,然后将左右子树路径和最大的那个值加上节点值作为当前节点的路径和,更新maxSum,并返回当前节点的路径和。
时间复杂度:O(n),其中n为二叉树节点个数,每个节点访问一次。
空间复杂度:O(h),其中h为二叉树高度,递归栈空间最多为h层。
阅读全文