Binary Tree Maximum Path Sum

Binary Tree Maximum Path Sum.png

解題思路 :

題目設計的路徑可以包涵 left + root + right 所以在記錄最大值的時候必須要比較 root->left(如果為正) 的最大值 + root + root->right(如果為正) 的最大值 但是要注意 node 的 traversal 一次只能走一條 所以在 function 中用 pass by reference 的方式改最大值的紀錄 但是 function 回傳值只能回傳左邊或右邊 ( 取大者 或是都不取如果兩邊走下去皆為負數 )

C++ code :

<pre><code>

class Solution {

public:

/**
 * @param root: The root of binary tree.
 * @return: An integer
 */
// write your code here
int findMax(TreeNode *root, int &res)
{
    if(!root) return 0;
    int sum = root->val;
    int left = findMax(root->left, res);
    int right = findMax(root->right, res);
    if(left > 0) sum += left;
    if(right > 0) sum += right;
    res = max(res, sum);
    return max(max(left, right) + root->val, root->val);
}

int maxPathSum(TreeNode *root) {
    int res = INT_MIN;
    findMax(root, res);
    return res;
}

};

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容