LeetCode 1022. 从根到叶的二进制数之和
题目描述
思路分析
解法一:DFS 累积路径值(推荐)
核心思路:
- 从根到叶维护当前二进制值
cur,每向下一层做一次左移并加上节点值。- 到叶子节点时将
cur加入答案。- 每个节点只访问一次。
复杂度分析:
- 时间复杂度:O(n),其中 n 为节点数。
- 空间复杂度:O(h),其中 h 为树高,递归栈占用。
class Solution {
private int sum = 0;
public int sumRootToLeaf(TreeNode root) {
dfs(root, 0);
return sum;
}
private void dfs(TreeNode node, int cur) {
if (node == null) {
return;
}
int val = (cur << 1) | node.val;
if (node.left == null && node.right == null) {
sum += val;
return;
}
dfs(node.left, val);
dfs(node.right, val);
}
}
func sumRootToLeaf(root *TreeNode) int {
sum := 0
var dfs func(node *TreeNode, cur int)
dfs = func(node *TreeNode, cur int) {
if node == nil {
return
}
val := (cur << 1) | node.Val
if node.Left == nil && node.Right == nil {
sum += val
return
}
dfs(node.Left, val)
dfs(node.Right, val)
}
dfs(root, 0)
return sum
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 257. 二叉树的所有路径 | 简单 | DFS |
| 129. 求根节点到叶节点数字之和 | 中等 | DFS |
| 199. 二叉树的右视图 | 中等 | DFS |
| 437. 路径总和 III | 中等 | 前缀和 |
| 1022. 从根到叶的二进制数之和 | 简单 | DFS |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!