当前位置: 首页 > 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队列实现,但递归更直观

 

 

相关文章:

  • Java-IO流之字符输出流详解
  • qiankun模式下 主应用严格模式,子应用el-popover 点击无效不显示
  • GAN训练困境与模型分类:损失值异常与生成判别模型差异解析
  • 第八部分:第六节 - 状态管理 (基础):协调多个界面的状态
  • 基于 ShardingSphere + Seata 的最终一致性事务完整示例实现
  • 局部变量-线程安全
  • 深度学习项目之RT-DETR训练自己数据集
  • 【docker】容器技术如何改变软件开发与部署格局
  • CMake在VS中使用远程调试
  • PocketFlow 快速入门指南
  • 【仿生】硬件缺失,与组装调试,皮肤问题
  • 【C/C++】入门grpc的idl
  • 【算法训练营Day06】哈希表part2
  • 研究探析 | 高速摄像机在一种新型冲击压痕技术及其动态标定方法中的应用
  • 「Java教案」顺序结构
  • 深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向
  • 剑指offer16_在O(1)时间删除链表结点
  • SCI论文核心框架与写作要素小结
  • python打卡训练营打卡记录day44
  • Linux I2C 子系统全解:结构、机制与工程实战
  • 平江网页设计报价/seo优化工作怎么样
  • 做cpa项目用什么网站/百度健康人工客服电话24小时
  • 大良网站建设公司/专业拓客公司联系方式
  • 澳门赌网站有做代理/郑州seo网站关键词优化
  • 上海网站建设服务器/搜索数据
  • 哈尔滨教育学会网站建设/网络推广的方式有哪些?