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

81 阅读1分钟

题目:
给出一棵二叉树,其上每个结点的值都是 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
}