题目
给定一个非空二叉树,返回其最大路径和。
本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
思路
简单题,dfs返回当前节点为一端的最大链。答案有两种情况,1 当前节点到子孙的一条链 2 当前节点为中端,两端为子孙。
class Solution {
public:
int MAX
= INT_MIN
;
public:
int maxPathSum(TreeNode
* root
) {
maxPath(root
);
return MAX
;
}
int maxPath(TreeNode
* root
){
if(root
== nullptr) return 0;
int R
= maxPath(root
->right
);
int L
= maxPath(root
->left
);
MAX
= max(MAX
,R
+L
+root
->val
);
MAX
= max(MAX
,root
->val
+ max(0,max(R
,L
)));
return root
->val
+ max(0,max(R
,L
));
}
};