LeetCode Binary Tree Maximum Path Sum 二叉树最大路径和(DFS)

 

 

 

题意:给一棵二叉树,要求找出任意两个节点(也可以只是一个点)的最大路径和,至少1个节点,返回路径和。(点权有负的。)

 

思路:DFS解决,返回值是,经过从某后代节点上来到当前节点且路径和最大的值。要注意如果子树传来的如果是负值,是可以同时丢弃的,但至少要将当前节点的val更新答案。

 

 

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 class Solution {
11 public:
12     int maxPathSum(TreeNode* root) {
13         ans=-2147483648;
14         DFS(root);
15         return ans;
16     }
17 private:
18     int ans;
19     int DFS(TreeNode* t) {
20         if(!t)  return 0;
21         int a=max(0,DFS(t->left));  //小于0的直接丢弃
22         int b=max(0,DFS(t->right));
23         ans=max(ans, a+b+t->val);   //更新,必须以当前节点为中转
24         return max(a, b)+t->val;    //只能返回一条到叶子的路径
25     }
26 };
AC代码

 

posted @ 2015-07-29 09:47  xcw0754  阅读(118)  评论(0编辑  收藏  举报