当前位置: 首页 > news >正文

(LeetCode 面试经典 150 题) 124. 二叉树中的最大路径和 (深度优先搜索dfs)

题目:124. 二叉树中的最大路径和

在这里插入图片描述
在这里插入图片描述

思路:深度优先搜索dfs,时间复杂度0(n)。

在当前节点root,最大的路径可能是 = 左子树符合要求的路径之和 + 右子树符合要求的路径之和。想要值最大,当然是避免累加到负数。细节看注释

C++版本:

/*** 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) {}* };*/
class Solution {
public:int mx=INT_MIN;int dfs(TreeNode* root){if(root==nullptr) return 0;// 左子树符合要求的路径之和int left=dfs(root->left);// 右子树符合要求的路径之和int right=dfs(root->right);// 当前节点root,最大的路径int sum=root->val;sum+=max(0,left);sum+=max(0,right);// 维护最大的答案mx=max(mx,sum);// 可能的最大边return max(0,max(max(left,right),0)+root->val);}int maxPathSum(TreeNode* root) {dfs(root);return mx;}
};

JAVA版本:

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {int mx=Integer.MIN_VALUE;int dfs(TreeNode root){if(root==null) return 0;int left=dfs(root.left);int right=dfs(root.right);int sum=root.val;sum+=Math.max(0,left);sum+=Math.max(0,right);mx=Math.max(mx,sum);return Math.max(0,Math.max(Math.max(left,right),0)+root.val);}public int maxPathSum(TreeNode root) {dfs(root);return mx;}
}

GO版本:

/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/
var mx int 
func maxPathSum(root *TreeNode) int {mx=math.MinIntdfs(root)return mx
}
func dfs(root *TreeNode) int {if root==nil {return 0}left:=dfs(root.Left)right:=dfs(root.Right)sum:=root.Valsum+=max(0,left)sum+=max(0,right)mx=max(mx,sum)return max(0,root.Val+max(0,max(left,right)))
}
http://www.dtcms.com/a/345068.html

相关文章:

  • 大麦盒子DM4036刷包推荐
  • 停车场道闸的常见形式
  • 【会议跟踪】Model-Based Systems Engineering (MBSE) in Practice 2025
  • 场景题:内存溢出 和 内存泄漏 有啥区别?
  • Python-UV
  • Android夜间模式切换及自定义夜间模式切换按钮实现快速适配夜间模式
  • LeetCode Hot 100 第一天
  • 《器件在EMC中的应用》---TVS在EMC中的应用
  • 中国大学MOOC--C语言第十一周结构类型
  • 开源版CRM客户关系管理系统源码包+搭建部署教程
  • 3D打印小批量低成本打印玩具工艺品模型-中科米堆CASAIM
  • MTK Linux DRM分析(十三)- Mediatek KMS实现mtk_drm_drv.c(Part.1)
  • 深入解析TCP/UDP协议与网络编程
  • LeetCode100-239滑动窗口最大值
  • 利用DeepSeek编写从xlsx数据源调用duckdb执行已保存的查询SQL语句,并把查询结果保存到xlsx文件的程序
  • 电机驱动实现插补算法之脉冲和方向接收(以stm32主控为例)
  • 飞算JavaAI开发助手: 新手开发任务管理系统实战流程
  • STM32G4-比较器
  • Autosar之Com模块
  • Redis面试精讲 Day 27:Redis 7.0/8.0新特性深度解析
  • 基于STM32+Python+MySQL实现在线温度计设计和制作
  • 【高等数学笔记-极限(4)】极限的运算法则
  • 大麦盒子DM4036-精简固件包及教程
  • Vue2+Vue3前端开发_Day7
  • [TG开发]部署机器人
  • Java多线程编程与锁机制全解析(覆盖Java到Spring)
  • 从0到1打造一台机器人走起来
  • 技术解读|MatrixOne高效 CDC:基于快照的分布式数据库优化方案
  • AI如何赋能财务分析:1份财务报表录入从数小时到5分钟
  • 声网SDK更新,多场景抗弱网稳定性大幅增强