哈希表+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. 递归遍历树

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

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

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

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据分析螺丝钉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值