[leetcode]Binary Tree Maximum Path Sum

来源:互联网 发布:互联网根域名 编辑:程序博客网 时间:2024/05/29 13:51

题目描述:

Given a binary tree, find the maximum path sum.

The path may start and end at any node in the tree.

For example:
Given the below binary tree,

       1      / \     2   3

Return 6.

分析:

对于给定的二叉树,找到一条任意路径使得,这条路径上的节点和的值最大。

可以通过递归遍历二叉树,得到左右子树的最大和,如果大于0,则加入当前的sum。递归返回的时候,返回左右子树中sum更大的一个。


代码如下:

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    int maxPathSum(TreeNode *root) {        int maxSum=INT_MIN;        dfs(root,maxSum);        return maxSum;    }    int dfs(TreeNode *root,int &maxSum){        if(root==NULL){            return 0;        }        int l,r;        l=dfs(root->left,maxSum);        r=dfs(root->right,maxSum);                int sum=root->val;        if(l>0){            sum+=l;        }        if(r>0){            sum+=r;        }        maxSum=max(maxSum,sum);                if(max(l,r)>0){            return max(l,r)+root->val;        } else{            return root->val;        }    }};



0 0