问题描述
笔记
设置buff[i]为:后序遍历时,以当前节点结束的最大路径和。竟然做出来,有点感动。
代码
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param root: The root of binary tree.
* @return: An integer
*/
int maxPathSum(TreeNode *root) {
// write your code here
if (root == NULL)
return 0;
vector<int> buff;
postorder(root, buff);
int res = buff[0];
for (int i = 1; i < buff.size(); i++)
res = max(res, buff[i]);
return res;
}
int postorder(TreeNode* root, vector<int>& buff)
{
if (root == NULL)
return 0;
int leftv;
int rightv;
if (root->left)
leftv = max(0, postorder(root->left, buff));
else
leftv = 0;
if (root->right)
rightv = max(0, postorder(root->right, buff));
else
rightv = 0;
buff.push_back(root->val + leftv + rightv);
return root->val + max(leftv, rightv);
}
};