
在最长路径中会有2类节点

当一个节点是A类节点时,正好可以将左边与右边连起来,最长路径是left+right+root->val
当一个节点是B类节点式,就只能取一边。最长路径是max(left,right)+root->val
/**
* 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 {
public:
int res=INT_MIN;
int maxPathSum(TreeNode* root) {
getmax(root);
return res;
}
int getmax(TreeNode* root){
if(!root) return 0;
int left=max(getmax(root->left),0);
int right=max(getmax(root->right),0);
//以root为根节点的路径
res=max(res,root->val+left+right);
//以root节点的父节点为根节点的路径
return max(left,right)+root->val;
}
};
二叉树最长路径求解
本文探讨了二叉树中最长路径的求解方法,通过定义两类节点A和B,详细解析了如何利用递归算法计算以任意节点为根的最大路径之和。此算法在遍历每个节点时,决定其作为路径起点还是中间节点的角色,从而得出全局最大值。
1174

被折叠的 条评论
为什么被折叠?



