LeetCode 1022. 从根到叶的二进制数之和

题目描述

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
本文作者:
本文链接: https://hgnulb.github.io/blog/2022/32522316
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!