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

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

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

题目描述

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

说明:

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

示例:

输入: [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 = val
        self.left = left
        self.right = right

def sumNumbers(root):
    def dfs(node, current_sum):
        if not node:
            return 0
        current_sum = current_sum * 10 + node.val
        if not node.left and not node.right:
            return current_sum
        return 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. 递归遍历树

步骤 当前节点 当前路径数字 说明
初始 4 4 根节点
左子树 9 49
左子树 5 495 叶子节点
返回 495 加入总和
右子树 1 491 叶子节点
返回 491 加入总和
右子树 0 40 叶子节点
返回 40 加入总和
  1. 总和计算
    • 495 + 491 + 40 = 1026

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

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

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-16 07:14:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-16 07:14:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-16 07:14:04       82 阅读
  4. Python语言-面向对象

    2024-05-16 07:14:04       91 阅读

热门阅读

  1. Android 获取视频缩略图

    2024-05-16 07:14:04       36 阅读
  2. 云计算第十八课

    2024-05-16 07:14:04       30 阅读
  3. 《图像处理:变革视觉世界的先锋力量》

    2024-05-16 07:14:04       32 阅读
  4. MYSQL主从灾难恢复

    2024-05-16 07:14:04       32 阅读
  5. Azure IoT Hub是啥

    2024-05-16 07:14:04       32 阅读
  6. uniapp横竖屏配置

    2024-05-16 07:14:04       30 阅读
  7. Android视频开发入门指南

    2024-05-16 07:14:04       25 阅读
  8. 汇编语言入门:探索 x86 架构

    2024-05-16 07:14:04       35 阅读
  9. GIN框架_会话

    2024-05-16 07:14:04       30 阅读
  10. yum提示没有可用软件包问题

    2024-05-16 07:14:04       28 阅读
  11. WPF中将多个函数返回值分别绑定至界面控件

    2024-05-16 07:14:04       37 阅读