leetcode 124 二叉树中的最大路径和
虽然是困难题但是莫名的好做。在一个二叉树中,每条所谓的路径都会有一个层级最高的头结点,某一路径也可以认为是从头结点向左右两边延伸而得到的结果。这样就可以通过从根节点开始的递归来实现。对于每一个节点而言,他需要完成两个任务,一个是找到自己作为头结点的最大值,也就是判断左右两支的返回值对自己是否有正的贡献,第二个任务是自己作为自己父节点的一支,返回加上本节点的最大的一支,看是否能为自己的父节点带来正贡献。代码中有两个小错,一个是int类变量作为if中的判断条件时,只有为0时才判断为负,另外一个则是res的初始值应当设置为INT_MIN,之前错设为0,就会导致最大值小于零的路径被忽略。贴代码
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode() : val(0), left(nullptr), right(nullptr) {} 8 * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} 9 * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} 10 * }; 11 */ 12 class Solution { 13 public: 14 int res; 15 int maxPathSum(TreeNode* root) 16 { 17 res = INT_MIN; 18 dfs(root); 19 return res; 20 } 21 int dfs(TreeNode* root) 22 { 23 if(!root) 24 return 0; 25 int num = root->val; 26 int n1 = dfs(root->left); 27 int n2 = dfs(root->right); 28 if(n1>0) 29 num+=n1; 30 if(n2>0) 31 num+=n2; 32 res = max(num,res); 33 if(n1>=n2 && n1>0) 34 return root->val+n1; 35 else if(n1<n2 && n2>0) 36 return root->val+n2; 37 else 38 return root->val; 39 } 40 };

                
            
        
浙公网安备 33010602011771号