예제 #1
0
 int max_path_sum(TreeNode *root, int &max_sum){
     if(root == NULL) return 0;
     int left = max_path_sum(root->left, max_sum);
     int right = max_path_sum(root->right, max_sum);
     if(left < 0) left = 0;
     if(right < 0) right = 0;
     if(left + right + root->val > max_sum) max_sum = left + right + root->val;
     if(left > right) return left + root->val;
     else return right + root->val;
     
 }
    void max_path_sum(TreeNode *node, int &tmp_sum, int &max_sum) {
        if (node == NULL) {
            tmp_sum = 0; 
            return ;
        }

        int left_sum = 0;
        int right_sum = 0;

        max_path_sum(node->left, left_sum, max_sum);
        max_path_sum(node->right, right_sum, max_sum);
        tmp_sum = max(node->val, max(node->val + left_sum, node->val + right_sum));
        max_sum = max(max_sum, max(tmp_sum, node->val + left_sum + right_sum));
    }
예제 #3
0
int main(int argc, char const* argv[])
{
	node *tree = prepare_tree();
	printf("max path sum = %d\n",max_path_sum(tree));
	printf("expected value = 20\n");
	return 0;
}
예제 #4
0
 int maxPathSum(TreeNode *root) {
     // Start typing your C/C++ solution below
     // DO NOT write int main() function
     int max_sum = INT_MIN;
     max_path_sum(root, max_sum);
     return max_sum;
 }
    int maxPathSum(TreeNode *root) {
        int max_sum = INT_MIN;
        int tmp_sum;

        max_path_sum(root, tmp_sum, max_sum);

        return max_sum;
    }