二叉树中的最大路径和

来源:互联网 发布:编程算法有哪些 编辑:程序博客网 时间:2024/05/18 03:23

给出一棵二叉树,寻找一条路径使其路径和最大,路径可以在任一节点中开始和结束(路径和为两个节点之间所在路径上的节点权值之和)


/**
 * Definition of TreeNode:
 * class TreeNode {
 * public:
 *     int val;
 *     TreeNode *left, *right;
 *     TreeNode(int val) {
 *         this->val = val;
 *         this->left = this->right = NULL;
 *     }
 * }
 */




class Solution {
public:
    /*
     * @param root: The root of binary tree.
     * @return: An integer
     */
    int maxPathSum(TreeNode * root) {
        // write your code here
        if (root == NULL) {
            return 0;
        }
        int max_sum = INT_MIN;
        maxPath(root, max_sum);
        return max_sum;
    }
    int maxPath(TreeNode * root, int& max_sum) {
        int left_value = 0;
        if (root->left != NULL) {
            left_value = maxPath(root->left, max_sum);
        }
        int right_value = 0;
        if (root->right != NULL) {
            right_value = maxPath(root->right, max_sum);
        }
        // compute max sum for this nodes
        int cur_sum = 0;
        int cur_max = 0;
        if (left_value >= 0 && right_value >= 0) {
            cur_max = max(left_value, right_value) + root->val;
            cur_sum = left_value + right_value + root->val;
        } else if (left_value >= 0) {
            cur_max = left_value + root->val;
            cur_sum = cur_max;
        } else if (right_value >= 0) {
            cur_max = right_value + root->val;
            cur_sum = cur_max;
        } else {
            cur_max = root->val;
            cur_sum = cur_max;
        }


        if (cur_sum > max_sum) {
            max_sum = cur_sum;
        }
 
        return cur_max;
    }
};