Sum of Root To Leaf Binary Numbers

easy binary tree dfs bit manipulation

Problem

You are given the root of a binary tree where every node has value 0 or 1. Each root-to-leaf path represents a binary number, read from the most significant bit at the root to the least significant bit at the leaf. Return the sum of these numbers for all leaves.

Inputroot = [1, 0, 1, 0, 1, 0, 1]
Output22
Paths read as binary: (100) + (101) + (110) + (111) = 4 + 5 + 6 + 7 = 22.

def sum_root_to_leaf(root):
    def dfs(node, cur):
        if node is None:
            return 0
        cur = (cur << 1) | node.val
        if node.left is None and node.right is None:
            return cur
        return dfs(node.left, cur) + dfs(node.right, cur)
    return dfs(root, 0)
function sumRootToLeaf(root) {
  function dfs(node, cur) {
    if (node === null) return 0;
    cur = (cur << 1) | node.val;
    if (node.left === null && node.right === null) return cur;
    return dfs(node.left, cur) + dfs(node.right, cur);
  }
  return dfs(root, 0);
}
class Solution {
    public int sumRootToLeaf(TreeNode root) {
        return dfs(root, 0);
    }
    private int dfs(TreeNode node, int cur) {
        if (node == null) return 0;
        cur = (cur << 1) | node.val;
        if (node.left == null && node.right == null) return cur;
        return dfs(node.left, cur) + dfs(node.right, cur);
    }
}
int dfs(TreeNode* node, int cur) {
    if (node == nullptr) return 0;
    cur = (cur << 1) | node->val;
    if (node->left == nullptr && node->right == nullptr) return cur;
    return dfs(node->left, cur) + dfs(node->right, cur);
}
int sumRootToLeaf(TreeNode* root) {
    return dfs(root, 0);
}
Time: O(n) Space: O(h)