从根到叶的二进制数之和

一句话说明

路径上的二进制数就是“上一层结果左移一位,再加上当前节点值”。

Go 代码

func sumRootToLeaf(root *TreeNode) int {
    var dfs func(node *TreeNode, cur int) int
    dfs = func(node *TreeNode, cur int) int {
        if node == nil {
            return 0
        }
 
        cur = cur*2 + node.Val
        if node.Left == nil && node.Right == nil {
            return cur
        }
        return dfs(node.Left, cur) + dfs(node.Right, cur)
    }
 
    return dfs(root, 0)
}

关键点

路径值要一路带着往下传,到了叶子节点再收割答案。

相关主题


返回:树算法 | 算法学习导航