//二叉树的最大路径和:
//
//题目描述:给定一个非空二叉树,返回其最大路径和。路径可以从任何节点出发,经过任何节点,但是一条路径最多只能经过一个父节点。
//
//cpp
#include <iostream>
#include <algorithm>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
int mm(TreeNode* root, int& sum) {
if (!root) return 0;
// 计算左子树和右子树的最大路径和
int leftMax = max(0, mm(root->left, sum));
int rightMax = max(0, mm(root->right, sum));
// 更新当前节点为根节点的最大路径和
sum = max(sum, root->val + leftMax + rightMax);
// 返回以当前节点为起点的最大路径和(注意只能经过当前节点的一条路径)
return max(leftMax, rightMax) + root->val;
}
int maxPathSum(TreeNode* root) {
// 如果根节点为空,直接返回0
if (!root) return 0;
int sum = INT_MIN;
mm(root, sum);
return sum;
}
int main() {
// Construct the binary tree
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(-3);
int result = maxPathSum(root);
cout << "Maximum path sum in binary tree: " << result << endl;
return 0;
}