1022.从根到叶的二进制数之和:DFS或BFS
【LetMeFly】1022.从根到叶的二进制数之和:DFS或BFS
力扣题目链接:https://leetcode.cn/problems/sum-of-root-to-leaf-binary-numbers/
给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。
- 例如,如果路径为
0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数01101,也就是13。
对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。
返回这些数字之和。题目数据保证答案是一个 32 位 整数。
示例 1:

1 | |
示例 2:
1 | |
提示:
- 树中的节点数在
[1, 1000]范围内 Node.val仅为0或1
题目大意
假如从根到某个叶节点所经过的所有节点的值分别是“1”、“0”、“0”,那么最终答案就$加上(100)_2$
二进制的100等于十进制的4
解题方法
方法一:层次遍历
我们只需要层次遍历这棵树,遍历到某个节点时,如果存在子节点,子节点就加上这个节点的“值的<<1”的结果
- 时间复杂度$O(n)$,其中$n$是树中节点的数量
- 空间复杂度$O(n)$
AC代码
C++
1 | |
方法二:深度优先搜索DFS
使用一个类中的“全局变量”$ans$记录所有路径数字之和,写一个DFS函数:
1 | |
其中now代表该走节点root时已经走过路径的二进制值。
首先更新走到当前节点后的路径值now = now << 1 + root->val,如果root为叶节点则将该路径值累加到$ans$,否则继续递归左右子中非空的节点。
- 时间复杂度$O(n)$,其中$n$是树中节点的数量
- 空间复杂度$O(n)$
AC代码
C++
1 | |
同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~
千篇源码题解已开源
1022.从根到叶的二进制数之和:DFS或BFS
https://blog.letmefly.xyz/2022/05/30/LeetCode 1022.从根到叶的二进制数之和/