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.
Have you been asked this question in an interview?
充分利用了树的递归性质的一题。
我第一种思路如下,可惜TLE了。
F(root)=max(F(root->left),F(root->right),左子树从根节点到叶子节点的最大路径+右 子树从根节点到叶子节点的最大路径+root->val)
当然,“ 左子树从根节点到叶子节点的最大路径”和“ 右 子树从根节点到叶子节点的最大路径”若小于零就别加了。
代码:
- public:
- int sum=0;
- int result=0;
- int PreOrderTraverse(TreeNode *root)
- {
- if(root==NULL){
- result=max(sum,result);
- }
- else
- {
- sum+=root->val;
- PreOrderTraverse(root->left);
- PreOrderTraverse(root->right);
- sum-=root->val;
- }
- return result;
- }
- int maxPathSum(TreeNode *root) {
- if(root==NULL)
- return 0;
- sum=0;
- result=0;
- int l=PreOrderTraverse(root->left);
- sum=0;
- result=0;
- int r=PreOrderTraverse(root->right);
- int a=maxPathSum(root->left);
- int b=maxPathSum(root->right);
- int c=(l>0?l:0)+(r>0?r:0)+root->val;
- return max(max(a,b),c);
- }
- int f(TreeNode *root, int & maxnum){
- if(root==NULL)
- return 0;
- int l=f(root->left,maxnum);
- int r=f(root->right,maxnum);
- int tmp=max(l,0)+max(r,0)+root->val;
- maxnum=max(maxnum,tmp);
- return max(max(l+root->val,r+root->val),root->val);
- }
- int maxPathSum(TreeNode *root) {
- if(root==NULL)
- return 0;
- int maxnum=INT_MIN;
- f(root,maxnum);
- return maxnum;
- }
相关热门文章
给主人留下些什么吧!~~
评论热议