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

从根到叶的二进制数之和

题目描述:

给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。

例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是 13 。
对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。

返回这些数字之和。题目数据保证答案是一个 32 位 整数。

示例 1:

输入:root = [1,0,1,0,1,0,1]
输出:22
解释:(100) + (101) + (110) + (111) = 4 + 5 + 6 + 7 = 22
示例 2:

输入:root = [0]
输出:0

提示:

树中的节点数在 [1, 1000] 范围内
Node.val 仅为 0 或 1

思路:

时间复杂度:O(n),空间复杂度O(1)

只要递归求出二叉树叶子节点的值就行

代码:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func sumRootToLeaf(root *TreeNode) int {
    sum,res := 0,0
    var dfs func(root *TreeNode)
    dfs = func(root *TreeNode){
        sum = sum*2+root.Val
        if root.Left != nil{
            dfs(root.Left)
        }
        if root.Right != nil{
            dfs(root.Right)
        }
        if root.Left == nil && root.Right == nil{
          
            res += sum
        }
        sum /=2
        
    }
    dfs(root)
    return res
}

代码效率:

执行用时:0 ms, 在所有 Go 提交中击败了100.00%的用户
内存消耗:2.9 MB, 在所有 Go 提交中击败了80.30%的用户


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!