力扣124. 二叉树中的最大路径和

 

题目:【https://leetcode.cn/problems/binary-tree-maximum-path-sum/description/?envType=study-plan-v2&envId=top-interview-150

又一道困难题目,自行顺利解决,记录一下自己思路。

树形DP,由子节点的最终结果决定父节点,然后自底向上,依次递推(其实就是DFS),这是基本思路。

几个注意点:

① 题目中说,不一定要经过总的根节点,所以每次递归的时候,都假设一下,这个节点就作为最终根节点的话,统计一下是否是最大值,但是要注意的是,这个最大统计出来以后,仅仅更新结果,并不作为return值返回,因为return的值不能当前节点当作总根。

② 如果左右节点都是负优化,就直接抛弃左右就好了,将当前节点的值返回。

 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 dfs(TreeNode* root) {
15         if (!root)
16             return 0;
17 
18         int l = dfs(root->left);
19         int r = dfs(root->right);
20         int tres = max(max(l, r) + root->val, root->val);
21         m_res = max(max(tres, l + r + root->val), m_res);
22         return tres;
23     }
24     int maxPathSum(TreeNode* root) {
25         m_res = INT_MIN;
26         dfs(root);
27         return m_res;
28     }
29 
30 private:
31     int m_res;
32 };

 

posted @ 2025-06-04 10:13  J&YANG  阅读(15)  评论(0)    收藏  举报