LeetCode题练习与总结:求根节点到叶节点数字之和--129

news2024/10/6 1:37:51

一、题目描述

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

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

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

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

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

示例 1:

输入:root = [1,2,3]
输出:25
解释:
从根到叶子节点路径 1->2 代表数字 12
从根到叶子节点路径 1->3 代表数字 13
因此,数字总和 = 12 + 13 = 25

示例 2:

输入:root = [4,9,0,5,1]
输出:1026
解释:
从根到叶子节点路径 4->9->5 代表数字 495
从根到叶子节点路径 4->9->1 代表数字 491
从根到叶子节点路径 4->0 代表数字 40
因此,数字总和 = 495 + 491 + 40 = 1026

提示:

  • 树中节点的数目在范围 [1, 1000] 内
  • 0 <= Node.val <= 9
  • 树的深度不超过 10

二、解题思路

 这个问题是一个典型的深度优先搜索(DFS)问题。我们需要遍历整棵树,并且记录从根节点到当前节点的路径所形成的数字。当我们到达一个叶子节点时,就计算这条路径的数字,并将其累加到总和中。对于每一个非叶子节点,我们将其值乘以10然后加上其左子节点的值,再加上其右子节点的值,这样就可以得到所有从根节点到叶子节点路径的数字之和。

算法步骤:

  1. 初始化总和为0。
  2. 从根节点开始进行深度优先搜索。
  3. 在搜索过程中,记录下从根节点到当前节点的路径值。
  4. 当到达叶子节点时,将路径值加到总和中。
  5. 返回总和。

三、具体代码

class Solution {
    public int sumNumbers(TreeNode root) {
        return dfs(root, 0);
    }

    private int dfs(TreeNode node, int sum) {
        if (node == null) {
            return 0;
        }
        sum = sum * 10 + node.val;
        if (node.left == null && node.right == null) {
            return sum;
        }
        return dfs(node.left, sum) + dfs(node.right, sum);
    }
}

四、时间复杂度和空间复杂度

1. 时间复杂度
  • 深度优先搜索(DFS)算法会遍历树中的每个节点一次。
  • 对于每个节点,我们执行常数时间的操作,即计算当前路径值和递归调用。
  • 因此,时间复杂度与树中节点的数量成正比,即 O(N),其中 N 是树中节点的数量。
2. 空间复杂度
  • 空间复杂度主要取决于递归调用栈的深度,这通常与树的高度成正比。
  • 在最坏的情况下,树可能是高度平衡的,此时递归调用栈的深度为 O(logN),其中 N 是树中节点的数量。
  • 在最好的情况下,树完全不平衡,每个节点都只有一个子节点,此时递归调用栈的深度为 O(N)。
  • 因此,空间复杂度在最坏情况下为 O(logN),在最好情况下为 O(N)。

综上所述,该算法的时间复杂度为 O(N),空间复杂度在最坏情况下为 O(logN),在最好情况下为 O(N)。

五、总结知识点

  1. 递归:这是一种编程技巧,函数自己调用自己,用于解决可以分解为多个相似子问题的大问题。在这个问题中,我们使用递归来进行深度优先搜索(DFS)。

  2. 深度优先搜索(DFS):这是一种用于遍历或搜索树或图的算法。在这个问题中,我们使用DFS来遍历二叉树的每个节点,并计算从根节点到叶节点的路径所代表的数字。

  3. 二叉树遍历:代码中实现的DFS实际上是二叉树的先序遍历(根-左-右),因为我们在访问左右子节点之前先访问当前节点。

  4. 路径累积:在递归过程中,我们将从根节点到当前节点的路径值传递给子节点,这是通过将当前路径值乘以10并加上当前节点的值来实现的。

  5. 回溯:虽然代码中没有显式的回溯步骤,但递归的本质包含了回溯的概念。一旦递归函数到达最深层并开始返回时,它会回溯到上一层,这是递归能够正常工作的关键。

  6. 边界条件处理:在递归函数中,我们首先检查当前节点是否为空,这是递归的边界条件,用于防止递归无限进行下去。

  7. 叶节点的判断:代码中通过检查当前节点是否没有子节点(即左右子节点都为空)来判断是否是叶节点。这是递归过程中的一个关键步骤,因为只有叶节点的路径值才会被累加到最终结果中。

  8. 函数参数和返回值dfs 函数接受当前节点和当前路径值作为参数,并返回从根节点到叶节点的路径总和。这是递归函数设计的一个重要方面,确保了每次递归调用都能够正确地传递和处理数据。

以上就是解决这个问题的详细步骤,希望能够为各位提供启发和帮助。

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

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

相关文章

【django问题集】django.db.utils.OperationalError: (1040, ‘Too many connections‘)

一、报错内容 django.db.utils.OperationalError: (1040, Too many connections) 主要体现&#xff1a;就是请求不了后台&#xff0c;登录都登录不了。 二、代码优化 原生django配置的mysql连接是没有连接池的功能&#xff0c;会导致mysql连接创建过多导致连接数超过了mysql服…

网络安全:什么是SQL注入

文章目录 网络安全&#xff1a;什么是SQL注入引言SQL注入简介工作原理示例代码 攻击类型为什么SQL注入危险结语 网络安全&#xff1a;什么是SQL注入 引言 在数字化时代&#xff0c;数据安全成为了企业和个人最关心的问题之一。SQL注入&#xff08;SQL Injection&#xff09;是…

移动操作系统更新管理

移动操作系统更新管理是大多数移动设备管理&#xff08;MDM&#xff09;解决方案中提供的一项功能&#xff0c;它允许组织管理移动设备上的操作系统更新。MDM解决方案定期扫描设备以检查可用的移动操作系统更新&#xff0c;并根据配置的策略管理操作系统更新。操作系统更新管理…

vulnhub靶机hacksudoLPE中Challenge-2

二、Challenge-2 1. ar Abusing 这个是要利用suid注意sudo也可以用&#xff0c;但是还是按照要求来 注意使用的suid自然是home文件夹 2. ash abusing 33. atobm Abusing 环境有问题&#xff0c;做不了 34. base32 Abusing 35. bash Abusing 36. cat Abusing 37. chmod Abusin…

我一直看不明白:“C++会被java/python等这些语言替代”

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「C的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 有些程序&#xff0c;是既可以…

ETL驱动企业集成转型与数据集成创新

数据集成&#xff1a;企业数智化的核心 数据集成是这一资产发挥价值的关键步骤&#xff0c;它将分散在不同来源的数据汇集到统一的平台&#xff0c;实现数据的集中管理和深入分析。通过这一过程&#xff0c;企业能够打破信息孤岛&#xff0c;提升数据的准确性和可靠性&#xf…

66aix AI生成系统-中文版安装

66aix是一款多功能的AI助手工具&#xff0c;可以帮助您生成独特的内容&#xff0c;美化和修改您的文章内容或&#xff0c;以及生成图像&#xff0c;去除图像背景。同时&#xff0c;它还包括完整功能的语音转换文本系统。 系统要求 PHP PHP 8 Extensions cURL, OpenSSL, mbstrin…

胡说八道(24.6.10)——数电与STM32

至此&#xff0c;信号与系统的简单笔记已经全部都写完了。其实&#xff0c;信号与系统的知识远远不只这些&#xff0c;总之&#xff0c;我的老师没讲完。其真实的原因是不在考试大纲里面。今天&#xff0c;看到一个短视频——学习的意义。其中有句话说&#xff0c;“因为考试不…

在 Visual Studio 2022 中配置 OpenCV

在 Visual Studio 2022 中配置 OpenCV 软件准备系统环境配置VS 2022 环境配置测试 软件准备 Visual Studio 2022 下载链接 OpenCV 下载链接 Visual Studio 的版本与 OpenCV 的 vc 版本需对应好&#xff0c;可以向下兼容&#xff1a; VS 2015 – vc14VS 2017 – vc15VS 2019…

【Python/Pytorch - 网络模型】-- SVD算法

文章目录 文章目录 00 写在前面01 基于Pytorch版本的SVD算代码02 理论知识 00 写在前面 &#xff08;1&#xff09;矩阵的奇异值分解在最优化问题、特征值问题、最小二乘方问题、广义逆矩阵问题及统计学等方面都有重要应用&#xff1b; &#xff08;2&#xff09;应用&#…

如何挑到高质量的静态IP代理?

在数字化时代&#xff0c;静态住宅IP代理已成为网络活动中不可或缺的一部分。无论是数据采集、网站访问&#xff0c;还是其他需要隐藏真实IP地址的在线活动&#xff0c;高质量的静态住宅IP代理都发挥着至关重要的作用。今天IPIDEA代理IP将详细介绍如何获取高质量的静态住宅IP代…

网站的文章起到什么作用

1.便于用户了解产品服务 如果想要获得更多的用户访问或者转化率&#xff0c;那么网站就得需要高质量、高原创的文章&#xff0c;通过文章可以让用户更好的了解公司的产品和服务&#xff0c;用户会根据自己的需求去选择服务类型&#xff0c;从而可以给公司产生业务订单&am…

HTML语义化

目录 语义化什么是HTML语义化语义化的优点 语义元素微格式 语义化 我们在设计网页时&#xff0c;不应以内容的表现形式来决定使用什么元素包裹&#xff0c;而是应该基于内容的语义来选择元素 <h1>标题</h1> <div>标题</div>它们同样都能表示标题这个…

QT基础入门【环境搭建篇】QT MQTT库的移植和使用(官方mqtt库编译详细教程)

之前写过一篇第三方MQTT库的编译教程,有兴趣的小伙伴可以去看看(QT MQTT库的移植和使用(非官方库qmqtt库)),今天主要讲解官方MQTT库的编译与使用方法(基于QT5.12.1)。 QT的MQTT库有两个,一个是官方库,一个是第三方库,二者的差别就是一个 API 上,使用方面没有太大区…

AIOps在业务运维的最佳应用实践

随着企业IT基础架构的复杂性日益增加&#xff0c;传统运维模式难以满足高效、稳定的业务需求。AIOps&#xff08;人工智能运维&#xff09;作为一种新兴技术&#xff0c;通过数据驱动的自动化和智能化手段&#xff0c;有效提升了IT运维的效率和可靠性。本文将探讨AIOps在业务运…

Vue3中的常见组件通信之`pinia`

Vue3中的常见组件通信之pinia 概述 ​ 在vue3中常见的组件通信有props、mitt、v-model、 r e f s 、 refs、 refs、parent、provide、inject、pinia、slot等。不同的组件关系用不同的传递方式。常见的撘配形式如下表所示。 组件关系传递方式父传子1. props2. v-model3. $ref…

Aigtek功率放大器参数怎么选型的

功率放大器是电子系统中重要的组成部分&#xff0c;选型合适的功率放大器对系统的性能和可靠性至关重要。本文下面安泰电子将介绍如何选型功率放大器的关键步骤和考虑因素。 首先&#xff0c;确定应用需求。在选型功率放大器之前&#xff0c;确定应用需求是至关重要的第一步。了…

Mathtype与word字号对照+Mathtype与word字号对照

字体大小对照表如下 初号44pt 小初36pt 一号26pt 小一24pt 二号22pt 小二18pt 三号16pt 小三15pt 四号14pt 小四12pt 五号10.5pt 小五9pt 六号7.5pt 小六6.5pt 七号5.5pt 八号5pt 1 保存12pt文件 首选选择第一个公式&#xff0c;将其大小改为12pt 然后依次选择 “预置”—…

Canvas倒计时

Canvas倒计时 前言 用Canvas绘制一个倒计时组件&#xff0c;显示距离新年还有多长时间&#xff0c;精确到秒&#xff0c;该倒计时需要实时更新 基础知识点 JS Date() 创建一个新Date对象的唯一方法是通过new 操作符&#xff0c;例如&#xff1a;let now new Date(); 若将…

华为OD机试 - 文件缓存系统 - 双向链表(Java 2024 D卷 100分)

华为OD机试 2024D卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;D卷C卷A卷B卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测…