哈希表+DFS快速解决力扣129题:求根节点到叶节点数字之和

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容,和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣!

  • 推荐:数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注
    在这里插入图片描述

  • 导航

    • LeetCode解锁1000题: 打怪升级之旅:每题都包括3-5种算法,以及详细的代码实现,刷题面试跳槽必备
    • 漫画版算法详解:通过漫画的形式和动态GIF图片把复杂的算法每一步进行详细可视解读,看一遍就掌握
    • python源码解读:解读python的源代码与调用关系,快速提升代码质量
    • python数据分析可视化:企业实战案例:企业级数据分析案例与可视化,提升数据分析思维和可视化能力
    • 程序员必备的数学知识与应用:全面详细的介绍了工程师都必备的数学知识

期待与您一起探索技术、持续学习、一步步打怪升级 欢迎订阅本专栏❤️❤️

题目描述

给定一个二叉树,计算所有根节点到叶节点数字之和。

说明:

  • 叶子节点是指没有子节点的节点。
  • 每条从根节点到叶节点的路径代表一个数字。

示例:

输入: [1,2,3]1/ \2   3
输出: 25
解释: 从根节点到叶节点的路径 1->2 表示数字 12.从根节点到叶节点的路径 1->3 表示数字 13.因此,数字之和为 12 + 13 = 25.

方法:深度优先搜索

解题步骤

  1. 定义一个辅助函数 dfs,用于递归遍历每个节点。
  2. 在递归过程中,计算从根节点到当前节点的数字。
  3. 如果当前节点是叶子节点,则将当前数字加到总和中。
  4. 对于每个非叶子节点,递归调用其子节点,并将当前节点的值传递下去。
  5. 最终返回总和。

Python 示例

class TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightdef sumNumbers(root):def dfs(node, current_sum):if not node:return 0current_sum = current_sum * 10 + node.valif not node.left and not node.right:return current_sumreturn dfs(node.left, current_sum) + dfs(node.right, current_sum)return dfs(root, 0)# 示例使用
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
print(sumNumbers(root))  # 输出: 25

算法分析

  • 时间复杂度:O(n),其中 n 是二叉树中的节点数量,因为每个节点访问一次。
  • 空间复杂度:O(h),其中 h 是二叉树的高度,用于递归调用栈的空间。

详细步骤说明

  1. 定义辅助函数 dfs

    • dfs(node, current_sum) 用于计算从根节点到当前节点的数字。
    • 如果当前节点为 None,返回 0
  2. 计算当前路径数字

    • current_sum = current_sum * 10 + node.val,将当前节点值加到路径数字中。
  3. 判断叶子节点

    • 如果当前节点是叶子节点,返回当前路径数字。
    • 否则,对其左右子节点递归调用 dfs 并累加结果。
  4. 返回总和

    • 最后在主函数中调用 dfs 并返回总和。

更多示例

  1. 输入:[4,9,0,5,1]

        4/ \9   0/ \
    5   1
    
    • 输出:1026
    • 解释:路径 4->9->5 表示数字 495,路径 4->9->1 表示数字 491,路径 4->0 表示数字 40。总和为 495 + 491 + 40 = 1026
  2. 输入:[1,0]

      1/
    0
    
    • 输出:10
    • 解释:路径 1->0 表示数字 10

图示与说明

考虑输入 [4,9,0,5,1]

  1. 构建二叉树

        4/ \9   0/ \
    5   1
    
  2. 递归遍历树

步骤当前节点当前路径数字说明
初始44根节点
左子树949
左子树5495叶子节点
返回495加入总和
右子树1491叶子节点
返回491加入总和
右子树040叶子节点
返回40加入总和
  1. 总和计算
    • 495 + 491 + 40 = 1026

🌹🌹如果觉得这篇文对你有帮助的话,记得一键三连关注、赞👍🏻、收藏是对作者最大的鼓励,非常感谢 ❥(^_-)

❤️❤️作者知识有限,如有错误,请各位大佬评论区批评指正,不胜感激❥(^_-)
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/13119.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

平均工资数据分析之回归

链接: R语言实战——中国职工平均工资的变化分析——相关与回归分析 1、模型诊断和评估的方法 1. 残差分析 1、残差图 (Residual Plot):用于检查残差是否存在非随机模式。理想情况下,残差应随机分布在零附近。 2、Q-Q 图 (Quantile-Quantile Plot)&am…

【liunx】yumvim

目录 Linux 软件包管理器 yum 关于 rzsz 注意事项 查看软件包 Linux开发工具 Linux编辑器-vim使用 vim的基本概念 vim的基本操作 vim正常模式命令集 vim末行模式命令集 简单vim配置 配置文件的位置 sudo提权 Linux 软件包管理器 yum 1.yum是什么&#xff1…

【前端】CSS基础(4)

文章目录 前言1、CSS常用属性1.1 文本属性1.1.1 文本对齐1.1.2 文本装饰1.1.3 文本缩进1.1.5 行高 前言 这篇博客仅仅是对CSS的基本结构进行了一些说明,关于CSS的更多讲解以及HTML、Javascript部分的讲解可以关注一下下面的专栏,会持续更新的。 链接&…

Day_5

1. Apache ECharts Apache ECharts 是一款基于 Javascript 的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表 官网地址:https://echarts.apache.org/zh/index.html 入门案例 快速入门&#x…

企业计算机服务器中了faust勒索病毒如何处理,faust勒索病毒解密恢复

随着网络技术的不断发展与应用,越来越多的企业利用网络走向了数字化办公模式,网络也极大地方便了企业生产运营,大大提高了企业生产效率,但对于众多企业来说,企业的数据安全一直是大家关心的主要话题,保护好…

fastjson2使用

说明:fastjson2是一个性能极致并且简单易用的Java JSON库(官方语),本文介绍在Spring Boot项目中如何使用fastjson2。 创建项目 首先,创建一个Maven项目,引入fastjson2依赖,如下: …

战网国际服注册教程 暴雪战网国际服账号注册一站式教程分享

战网国际版,也即Battle.net环球版,是由暴雪娱乐操刀的全球化游戏交流枢纽,它突破地理限制,拥抱全世界的游戏玩家。与仅限特定地区的版本不同,国际版为玩家开辟了无障碍通道,让他们得以自由探索暴雪庞大游戏…

如何使用JMeter测试导入接口/导出接口?

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号:互联网杂货铺,回复1 ,免费获取软件测试全套资料,资料在手,涨薪更快 今天上班,被开发问了一个问题:JM…

最小质数对-第12届蓝桥杯国赛Python真题解析

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第63讲。 最小质数对&#…

基于SSM的“羽毛球馆管理系统”的设计与实现(源码+数据库+文档)

基于SSM的“羽毛球馆管理系统”的设计与实现(源码数据库文档) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统结构图 登录界面 后台用户添加 后台用户管理 球场添加 球场…

Linux 第三十三章

🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C,linux 🔥座右铭:“不要等到什么都没有了…

大模型学习笔记九:模型微调

文章目录 一、什么时候需要Fine-Tuning二、用Hugging Face根据电影评论输出来对电影进行情感分类1)安装依赖2)操作流程3)名字解释4)代码导入库和加载模型、加载数据库、加载tokenlizer5)其他相关公共变量赋值(随机种子、标签集评价、标签转token_Id)6)处理数据集:转成…

Altium Designer封装库和元器件符号库下载与导入教程(SnapEDA 、Ultra Librarian、Alldatasheetcn)

1.AD封装库和元器件符号库下载网址 以下是一些全球热门的Altium Designer封装库和元器件符号库下载网址推荐: Altium Content Vault (现称为Altium Manufacturer Part Search):这是Altium官方提供的元器件库,可以直接在Altium Designer中使用…

免费体验GPT-4o这5大功能,非常好用!

这几天,OpenAI发布了新的GPT版本,GPT-4o,比GPT4更加智能也更快。 据说,GPT-4o在文本、推理和编码智能方面实现了GPT-4 Turbo级别的性能,在多语言、文本、音频和视觉功能方面甚至超过了市面上所有同类产品。 有几个亮点…

数据结构复习指导之图的存储及基本操作

文章目录 图的存储及基本操作 考纲内容 复习提示 1.邻接矩阵法 2.邻接表法 3.十字链表 4.邻接多重表 5.图的基本操作 图的存储及基本操作 图的存储必须要完整、准确地反映顶点集和边集的信息。根据不同图的结构和算法,采用不同的存储方式将对程序的效率产生…

Python进度条工具——tqdm

原文链接:http://www.juzicode.com/python-note-tqdm 在安装Python库文件的时候我们经常可以看到这种进度条: 其实Python库中就自带了现成的工具库——tqdm。 tqdm读起来比较拗口,它是从“进程”的阿拉伯语taqaddum简化而来。 安装tqdm 使用…

C++二叉搜索树搜索二叉树二叉排序树

C二叉搜索树 1. 二叉搜索树的概念 二叉搜索树(BST,Binary Search Tree),也称为二叉排序树或二叉查找树。它与一般二叉树的区别在于:每个结点必须满足“左孩子大于自己,右孩子小于自己”的规则。在这种规则的约束下,二…

ADS Momentum 仿真设置

1、选择Momenttum Microwave。 2、Layout不需要操作。 3、Partitioning 不需要操作。 4、没有叠层的话需要新建叠层,过孔可以在叠层中右键添加。 5、注意确认端口的Gnd Layer。 6、设置仿真频率。 7、Output Plan。 8、Option。 最后运行仿真,等待结果即…

算法学习(7)-树

目录 开启“树”之旅 二叉树 堆--优先队列 并查集 开启“树”之旅 是不是很像一棵倒挂的树?也就是说它是根朝上, 而叶子朝下的。不像?哈哈,来看看下面的图你就会觉得像啦。 你可能会间: 树和图有什么区别&#xff…

代码生成工具1 ——项目简介和基础开发

1 项目简介 需要提前在数据库建好表,然后执行代码生成工具,会生成简单的Java文件,避免重复编写增删改查代码。类似的工具网上有很多,本人开发这个工具属于自娱自乐。这个专栏会记录开发的过程。 2 项目搭建 数据库使用MySQL &…