LeetCode热题100 二叉树中的最大路径和

📅 发布时间:2026/7/8 19:00:20 👁️ 浏览次数:
LeetCode热题100 二叉树中的最大路径和
题目描述二叉树中的 路径 被定义为一条节点序列序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root 返回其 最大路径和 。示例 1输入root [1,2,3]输出6解释最优路径是 2 - 1 - 3 路径和为 2 1 3 6示例 2输入root [-10,9,20,null,null,15,7]输出42解释最优路径是 15 - 20 - 7 路径和为 15 20 7 42提示树中节点数目范围是[1,3∗104]树中节点数目范围是 [1, 3 * 10^4]树中节点数目范围是[1,3∗104]-1000 Node.val 1000思路1 递归调用获取左子树的最大值和右子树的最大值。2 自身结点 左子树最大值 右子树最大值 或者 自身结点 就是当前这棵树的最大值。3 递归返回的时候只返回结点 左子树和右子树的最大值。、代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */classSolution{public:intansINT_MIN;intmaxPathSum(TreeNode*root){maxSum(root);returnans;}intmaxSum(TreeNode*root){if(rootnullptr)return0;intmax_leftmaxSum(root-left);intmax_rightmaxSum(root-right);// 更新最大值ansmax(ans,root-valmax(max_left,0)max(max_right,0));// 返回该结点最大值returnmax({root-valmax_left,root-valmax_right,root-val});}};