Leetcode 1022.從根到葉的二進制數之和
1 題目描述(Leetcode題目鏈接)
給出一棵二叉樹,其上每個結點的值都是 0 或 1 。每一條從根到葉的路徑都代表一個從最高有效位開始的二進制數。例如,如果路徑爲 0 -> 1 -> 1 -> 0 -> 1,那麼它表示二進制數 01101,也就是 13 。
對樹上的每一片葉子,我們都要找出從根到該葉子的路徑所表示的數字。
以 10^9 + 7 爲模,返回這些數字之和。
輸入:[1,0,1,0,1,0,1]
輸出:22
解釋:(100) + (101) + (110) + (111) = 4 + 5 + 6 + 7 = 22
提示:
- 樹中的結點數介於 1 和 1000 之間。
- node.val 爲 0 或 1 。
2 題解
深度優先搜索就可以了。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def dfs(self, root, val):
val <<= 1
val += root.val
if not root.left and not root.right:
self.res += val
return
if root.left: self.dfs(root.left, val)
if root.right: self.dfs(root.right, val)
def sumRootToLeaf(self, root: TreeNode) -> int:
self.res = 0
self.dfs(root, 0)
return self.res%1000000007