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

(每日一道算法题)求根节点到叶节点数字之和

129. 求根节点到叶节点数字之和 - 力扣(LeetCode)

给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。

每条从根节点到叶节点的路径都代表一个数字:

  • 例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。

计算从根节点到叶节点生成的 所有数字之和 。

叶节点 是指没有子节点的节点。

 

 

理解问题:我们需要计算二叉树中从根节点到每个叶节点的路径所表示数字的总和。路径表示的数字由路径上的节点值按顺序组成。

问题分析

二叉树的每个节点存放着0-9的数字,从根节点到叶节点的路径构成了一个数字。例如,路径1->2->3表示数字123。我们需要计算所有这样的路径数字之和。

关键点:

  • ​叶节点​​:没有子节点的节点(即路径终点)
  • ​数字生成规则​​:当前路径数字 = 上一层路径数字×10 + 当前节点值
  • ​总和计算​​:对所有叶节点的路径数字求和

解决方案:深度优先搜索(DFS)

采用递归方法遍历每条路径,在遍历过程中累积路径数字,到达叶节点时将当前路径数字加入总和。

class Solution {public int sumNumbers(TreeNode root) {// 从根节点开始遍历,初始路径值为0return dfs(root, 0);}private int dfs(TreeNode node, int currentSum) {if (node == null) return 0;// 更新当前路径值:原值×10 + 当前节点值currentSum = currentSum * 10 + node.val;// 如果是叶节点,返回当前路径值if (node.left == null && node.right == null) {return currentSum;}// 递归计算左右子树的结果,并返回它们的和int leftSum = dfs(node.left, currentSum);int rightSum = dfs(node.right, currentSum);return leftSum + rightSum;}
}

算法流程

​开始遍历​​:从根节点开始,初始路径值为0

​更新路径值​​:路径值 = 路径值×10 + 当前节点值

​叶节点判断​​:

  • 如果是叶节点,返回当前路径值
  • 否则递归遍历子节点

​结果合并​​:返回左右子树结果之和

 

复杂度分析

  • ​时间复杂度​​:O(N) - 每个节点只访问一次
  • ​空间复杂度​​:O(H) - 递归调用栈深度(H为树的高度)

优化与注意事项

  1. ​空节点处理​​:递归前检查子节点是否存在
  2. ​大数问题​​:题目限定节点值为0-9,路径深度有限,无需担心溢出
  3. ​迭代替代方案​​:可使用DFS栈或BFS队列实现,但递归更直观

 

 

http://www.lqws.cn/news/128827.html

相关文章:

  • 【高校论文】DFORMER重新思考用于语义分割的RGBD表示学习[南开国防科大]
  • C++多态与继承实战解析
  • Python-面向对象
  • RabbitMQ 在解决数据库高并发问题中的定位和核心机制
  • 数据结构与算法学习笔记(Acwing 提高课)----动态规划·树形DP
  • 《小明的一站式套餐服务平台:抽象工厂模式》
  • StarRocks与Apache Iceberg:构建高效湖仓一体的实时分析平台
  • 物联网控制技术期末复习 知识点总结 第二章 单片机
  • 【Python训练营打卡】day43 @浙大疏锦行
  • 高并发区块链系统实战:从架构设计到性能优化
  • VS代码生成工具ReSharper v2025.1——支持.NET 10和C# 14预览功能
  • WARNING! The remote SSH server rejected x11 forwarding request.
  • 查找 Vue 项目中未使用的依赖
  • ffmpeg(三):处理原始数据命令
  • 网络编程之TCP编程
  • Ethernet IP转Modbus网关在热泵机组中的协议转换技术实现
  • webpack打包学习
  • Linux操作系统Shell脚本概述与命令实战
  • 标识符关键字
  • 论文阅读笔记——Large Language Models Are Zero-Shot Fuzzers
  • 【读代码】从预训练到后训练:解锁语言模型推理潜能——Xiaomi MiMo项目深度解析
  • NLP常用工具包
  • 打卡第36天:模型可视化以及推理
  • [Linux] Linux GPIO应用编程深度解析与实践指南(代码示例)
  • 乘用车自动驾驶和非乘用车(矿车,卡车)自动驾驶区别
  • 从传统 RAG 到知识图谱 + Agent
  • MySQL补充知识点学习
  • Java中Git基础操作详解(clone、commit、push、branch)
  • 高防IP可以防护什么攻击类型?企业网络安全的第一道防线
  • 【投稿优惠】2025年人工智能与图像处理国际会议(AIIP 2025)