题目:
给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。
- 例如,如果路径为
0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数01101,也就是13。
对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。
返回这些数字之和。题目数据保证答案是一个 32 位 整数。
算法:
不叫backtrack,就是一个dfs
func sumRootToLeaf(root *TreeNode) int {
var backtrack func(node *TreeNode, num int)
sum := 0
backtrack = func(node *TreeNode, num int) {
if node == nil {
return
}
num = num << 1 + node.Val
if node.Left == nil && node.Right == nil {
sum = sum + num
return
}
backtrack(node.Left, num)
backtrack(node.Right, num)
}
backtrack(root, 0)
return sum
}