❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容,和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣!
推荐:数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注
导航:
- LeetCode解锁1000题: 打怪升级之旅:每题都包括3-5种算法,以及详细的代码实现,刷题面试跳槽必备
- 漫画版算法详解:通过漫画的形式和动态GIF图片把复杂的算法每一步进行详细可视解读,看一遍就掌握
- python源码解读:解读python的源代码与调用关系,快速提升代码质量
- python数据分析可视化:企业实战案例:企业级数据分析案例与可视化,提升数据分析思维和可视化能力
- 程序员必备的数学知识与应用:全面详细的介绍了工程师都必备的数学知识
期待与您一起探索技术、持续学习、一步步打怪升级 欢迎订阅本专栏❤️❤️
题目描述
给定一个二叉树,计算所有根节点到叶节点数字之和。
说明:
- 叶子节点是指没有子节点的节点。
- 每条从根节点到叶节点的路径代表一个数字。
示例:
输入: [1,2,3]
1
/ \
2 3
输出: 25
解释: 从根节点到叶节点的路径 1->2 表示数字 12.
从根节点到叶节点的路径 1->3 表示数字 13.
因此,数字之和为 12 + 13 = 25.
方法:深度优先搜索
解题步骤
- 定义一个辅助函数
dfs
,用于递归遍历每个节点。 - 在递归过程中,计算从根节点到当前节点的数字。
- 如果当前节点是叶子节点,则将当前数字加到总和中。
- 对于每个非叶子节点,递归调用其子节点,并将当前节点的值传递下去。
- 最终返回总和。
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 是二叉树的高度,用于递归调用栈的空间。
详细步骤说明
-
定义辅助函数
dfs
:dfs(node, current_sum)
用于计算从根节点到当前节点的数字。- 如果当前节点为
None
,返回0
。
-
计算当前路径数字:
current_sum = current_sum * 10 + node.val
,将当前节点值加到路径数字中。
-
判断叶子节点:
- 如果当前节点是叶子节点,返回当前路径数字。
- 否则,对其左右子节点递归调用
dfs
并累加结果。
-
返回总和:
- 最后在主函数中调用
dfs
并返回总和。
- 最后在主函数中调用
更多示例
-
输入:
[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
。
- 输出:
-
输入:
[1,0]
1 / 0
- 输出:
10
- 解释:路径
1->0
表示数字10
。
- 输出:
图示与说明
考虑输入 [4,9,0,5,1]
:
-
构建二叉树:
4 / \ 9 0 / \ 5 1
-
递归遍历树:
步骤 | 当前节点 | 当前路径数字 | 说明 |
---|---|---|---|
初始 | 4 | 4 | 根节点 |
左子树 | 9 | 49 | |
左子树 | 5 | 495 | 叶子节点 |
返回 | 495 | 加入总和 | |
右子树 | 1 | 491 | 叶子节点 |
返回 | 491 | 加入总和 | |
右子树 | 0 | 40 | 叶子节点 |
返回 | 40 | 加入总和 |
- 总和计算:
- 495 + 491 + 40 = 1026
🌹🌹如果觉得这篇文对你有帮助的话,记得一键三连关注、赞👍🏻、收藏是对作者最大的鼓励,非常感谢 ❥(^_-)
❤️❤️作者知识有限,如有错误,请各位大佬评论区批评指正,不胜感激❥(^_-)