- 思路
一开始没有什么思路,看了大家的评论之后大概了解了可以用递归算的方法,最关键的就是有一个变量sum记录最大路径(加上根结点的),并可以随时与新的根结点比较并替换,而左右子树的选择是如果小于0直接舍弃取0就好,这样保证每次最后的都是正数,这样返回的时候一定是加法则一定路径在增加 - 代码解释
max_left,max_right标记新的根结点加上以被选择的最长的左子树和右子树的路径,left_gain,right_gain是将路径与0比较后选择舍弃还是加上,new_root记录加上新的结点后的路径大小,如果比原结点大则替换 - 100% 100%的代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int max(int a, int b){
if