给出一棵二叉树,其上每个结点的值都是 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
。
C++
class Solution {
public:
int mod=1000000007;
void dfs(TreeNode* root, int cur, int* p)
{
if(NULL==root->left && NULL==root->right)
{
(*p)+=cur;
(*p)%=mod;
return;
}
if(root->left)
{
dfs(root->left,(cur*2+root->left->val)%mod,p);
}
if(root->right)
{
dfs(root->right,(cur*2+root->right->val)%mod,p);
}
}
int sumRootToLeaf(TreeNode* root)
{
int ans=0;
int* p=&ans;
dfs(root,root->val,p);
return ans;
}
};
python
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
mod=1000000007
class Solution:
def dfs(self,root,cur,ans):
if None==root.left and None==root.right:
ans+=cur
ans%=mod
if root.left:
ans=self.dfs(root.left,(cur*2+root.left.val)%mod,ans)
if root.right:
ans=self.dfs(root.right,(cur*2+root.right.val)%mod,ans)
return ans
def sumRootToLeaf(self, root: TreeNode) -> int:
ans=0
ans=self.dfs(root,root.val,ans)
return ans