leetcode 2026-02-24 每日一练 - 从根到叶的二进制数之和

leetcode 2026-02-24 每日一练 - 从根到叶的二进制数之和
Austoin今天开始记录leetcode的每日一练和其他题目编写思路与过程。
题目描述
LeetCode 1022. 从根到叶的二进制数之和
给出一棵二叉树,其上每个结点的值都是 0 或 1。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。
例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是 13。
对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。
返回这些数字之和。题目数据保证答案是一个 32 位整数。
解题思路
根节点到叶子节点的数字之和,就是根节点到叶子节点的二进制数之和。
核心思路是使用深度优先搜索(DFS)遍历二叉树,在遍历过程中:
- 每向下走一层,当前数字左移一位(相当于乘以2)
- 将当前节点的值加入到数字中(通过位运算
|操作) - 到达叶子节点时,将该路径表示的数字累加到结果中
代码实现
1 | /** |
核心细节
- 位运算技巧:
num << 1 | node.Val等价于num * 2 + node.Val,但位运算更高效 - 叶子节点判断:
node.Left == nil && node.Right == nil确保只在叶子节点累加结果 - 递归终止条件:遇到空节点直接返回,避免空指针错误
复杂度分析
- 时间复杂度:
O(n),其中n是二叉树的节点数,需要遍历每个节点一次 - 空间复杂度:
O(h),其中h是二叉树的高度,递归调用栈的深度
总结
这是一道典型的二叉树DFS遍历题目,关键在于:
- 理解二进制数的构建过程(左移 + 加当前位)
- 正确识别叶子节点并累加结果
- 使用位运算提高效率













