面试经典150题——求根节点到叶节点数字之和

brown hay on tractor under white and blue sky during daytime

1. 题目描述

image-20240425095614704

2.  题目分析与解析

2.1 思路一——DFS

  1. 理解问题: 首先要理解题目的要求,即对于给定的二叉树,我们需要找出从根节点到所有叶子节点的所有路径,然后将每一条路径上的数字组成一个整数,最后求出这些整数的和。

  2. 定义递归函数: 递归函数的目的是遍历树,同时记录下遍历到当前节点为止形成的数字。递归函数可以接收两个参数:当前节点和当前路径代表的数字。

  3. 编写递归逻辑

    • 递归出口:如果当前节点是叶子节点(即没有左右子节点),则将当前路径代表的数字加到总和中。

    • 递归过程:如果当前节点不是叶子节点,则对其左右子节点进行递归调用,同时更新路径代表的数字。

  4. 计算路径数字: 在从根节点向下遍历的过程中,每向下一层,路径代表的数字就要左移一位(即乘以10),然后加上当前节点的值。

  5. 全局变量或返回值: 为了存储总和,可以使用全局变量,或者在递归函数中返回当前累加的和,并在上一层递归中将返回值累加。

  6. 开始递归: 最初调用递归函数时,从根节点开始,并且当前路径数字为0。

  7. 边界条件: 考虑空树或只有一个节点的树的边界条件。

2.2 思路二——BFS

  1. 理解BFS和递归的区别: 广度优先搜索(BFS)与递归方法不同,它使用队列来迭代地遍历树的每一层。在BFS中,我们按照树的层级从上到下逐层遍历节点,而递归方法通常是深度优先搜索(DFS),从根节点开始直到叶子节点,然后回溯。

  2. 初始化: 在方法中,首先检查根节点是否为null。如果是,返回0。否则,初始化一个队列layer来保存树的每层节点。

  3. 处理根节点: 将根节点加入队列。

  4. 层序遍历: 当队列不为空时,循环执行以下步骤:

    • 从队列中取出一个节点作为当前节点。

    • 检查当前节点是否有左子节点,如果有,则计算左子节点代表的新数字并更新左子节点的值,然后将左子节点加入队列。

    • 检查当前节点是否有右子节点,如果有,同样计算右子节点代表的新数字并更新右子节点的值,然后将右子节点加入队列。

    • 如果当前节点是叶子节点(没有左右子节点),将它的值加到结果result中。

  5. 更新节点值: 在每个非叶子节点上,更新其左右子节点的值为 当前节点的值*10+子节点的原始值。这一步模拟深度优先过程中的路径数字累加。

  6. 累加叶子节点的值: 对于每个叶子节点,其值现在代表了从根节点到该叶子节点的路径数字。将这些数字累加到结果变量result中。

  7. 返回结果: 遍历完成后,返回result,它包含了所有从根节点到叶子节点路径所代表的数字之和。

3. 代码实现

3.1 思路一

image-20240425101217123

image-20240425101129709

3.2 思路二

image-20240425100048754

image-20240425095552662

4. 相关复杂度分析

BFS方法(层序遍历)

  • 时间复杂度:O(N),其中N是树中节点的数量。在BFS中,每个节点恰好被访问一次,无论是内部节点还是叶子节点。

  • 空间复杂度:最坏情况下(完全二叉树)是O(N),因为队列需要存储一层中的所有节点,对于完全二叉树来说,最底层的节点大约占总节点数的一半。在最好的情况下(高度倾斜的树),空间复杂度是O(1),因为队列中同时只有一个元素。

DFS方法(深度优先遍历)

  • 时间复杂度:O(N),与BFS相同,每个节点恰好被访问一次。

  • 空间复杂度:最坏情况下(完全非平衡树,即链表形状)是O(N),因为要存储递归栈。在最好情况下(完全二叉树),空间复杂度是O(logN),对应于树的高度。

总结

  • 对于时间复杂度,两种方法都是O(N),因为两种方法都会访问树中的每一个节点。

  • 对于空间复杂度,BFS和DFS之间的差异通常依赖于树的形状。对于大多数情况,DFS的空间复杂度较低,因为它的最坏情况是高度倾斜的树。而BFS在最坏情况下可能需要存储许多节点。

需要注意的是,DFS递归的空间复杂度也包括隐式的调用栈。在实际情况中,如果树非常深,DFS可能会因为堆栈溢出而不如BFS稳定。相反,如果树非常宽,则BFS可能会因为队列变得非常大而消耗更多内存。

当然需要提示一下:我的代码中BFS方法修改了树的结构,因为它实际上改变了节点的值来存储路径总和。这在实际应用中可能是不可取的,因为它破坏了原始数据,如果像解决这个问题就是采用一个和队列相同结构的部分存储值就行。DFS方法则没有这个问题,它保持了树的结构不变。

image-20240301121908772

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

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

相关文章

数据治理和数据管理 傻傻分不清楚?

互联网时代,数据,这一无形资产,已成为现代企业的核心竞争力。如何高效地管理和利用数据,成为企业关注的焦点。在这个过程中,数据治理(Data Governance)和数据管理(Data Management&a…

Web-SpringBootWen

创建项目 后面因为报错,所以我把jdk修改成22,仅供参考。 定义类,创建方法 package com.start.springbootstart.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotati…

如果把软路由的网段更换成169.254.0.0/16会咋样?

前言 这几天有小伙伴在折腾软路由系统,然后问题就来了。 他咨询的是:为啥电脑连接软路由之后,无法访问软路由的管理页? 嗯。。。确实不是什么大事。但不注意看,还以为软路由没有正常获取到ip。 熟悉网络的小伙伴们都…

SpringBoot+MyBatis-Plus+jsqlparser实现多租户功能

前言 多租户技术(multi-tenancy technology)是一种软件架构技术,它允许在单个系统实例上为多个用户或组织提供服务,同时确保这些用户之间数据的隔离性。在多租户架构中,每个租户(可以是个人用户、企业、组…

CLIP图生文

CLIP模型本身并不是图生文的,CLIP模型用来做图片和文本描述的匹配。 但它可以与其他技术结合使用来实现这一点,以下是两种常见的方法: CLIP作为文本灵感检索系统: 这种方法利用了 CLIP 在寻找图像和文本之间相似表示方面的优势。…

2015-2023年上市公司商道融绿ESG评级数据

2015-2023年上市公司商道融绿ESG评级数据 1、时间:2015-2023年 2、来源:整理自WIND 3、指标:代码、名称、商道融绿ESG评级 4、范围:上市公司 5、指标解释: 商道融绿ESG评级体系是一种全新的评级体系,…

2024免费专为Mac用户设计的清理和优化工具CleanMyMac X

CleanMyMac X是一款专为Mac用户设计的清理和优化工具。以下是对CleanMyMac X的详细介绍: 一、主要功能 系统清理:CleanMyMac X能够智能扫描Mac的磁盘空间,识别并清理各种垃圾文件,这些垃圾文件包括重复文件、无用的语言安装包、i…

MKcms漏洞合集

MKCMS5.0漏洞合集 简介及安装 MKCMS5.0是一款基于PHPMYSQL开发制作的专业全自动采集电影网站源码。程序不需授权上传直接使用,自动更新电影,无人值守! 完整的会员影视中心 后台可对接卡盟 可以设置收费观看模式。 下载地址:链接:https://pan.baidu.com…

HTTP基础知识

1. HTTP常见的状态码有哪些? 常见状态码: 200:服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。 301 : (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时&a…

【kettle001】访问国产达梦数据库并处理数据至execl文件

一直以来想写下基于kettle的系列文章,作为较火的数据ETL工具,也是日常项目开发中常用的一款工具,最近刚好挤时间梳理、总结下这块儿的知识体系。 熟悉、梳理、总结下达梦(DM)关系型数据库相关知识体系 1.环境准备 搭建…

iOS——NSCache

什么是NSCache NSCache是Foundation框架中的一个类,用于在iOS和macOS应用程序中进行临时性的内存缓存。它提供了一种轻量级的缓存机制,可以用于存储临时性的数据,例如图片、对象等。NSCache的主要特点和用法包括: 临时性缓存&…

谷歌搜索量在哪里查询?

如果您想查询的是谷歌搜索的流量数据,比如某个关键词的搜索频率或趋势,Google Trends 是一个很好的工具,它可以让您看到不同时间段内关键词的搜索流行度,也可以比较几个关键词的搜索量,您可以直接访问 Google Trends 网…