Description
Problem Link
对于给定的二叉树,求最大路径长度。HINT:不一定要经过根节点。
例如下图,最大路径为8->-3->11
Possible Solution
遍历二叉树:计算以当前节点为中间节点,连接左右子树的最大路径,并返回经过当前结点向左/右子树走的最大路径。例如上图中,以-3为连结的最大路径是8->-3->11,遍历-3这个结点,返回值是11+-3 =8。
附代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
private:
static const int INF = 0x3F3F3F3F;
int ans;
int traverse(TreeNode *root) {
if (root == NULL) return -INF;
int leftval = traverse(root -> left);
int rightval = traverse(root -> right);
int ans = root -> val;
if (leftval > 0) ans += leftval;
if (rightval > 0) ans += rightval;
if (ans > this -> ans) this-> ans = ans;
int maxval = std::max(leftval, rightval);
return root -> val + (maxval > 0 ? maxval : 0);
}
public:
int maxPathSum(TreeNode* root) {
this->ans = -INF;
this->traverse(root);
return this->ans;
}
};