题目:
给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是 13 。
对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。
返回这些数字之和。题目数据保证答案是一个 32 位 整数。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int _sumRootToLeaf(struct TreeNode* root, int num)
{
int sum = 0;
num = (num<<1)+root->val;
if(root->left == NULL && root->right == NULL) return num;
if(root->left) sum += _sumRootToLeaf(root->left, num);
if(root->right) sum += _sumRootToLeaf(root->right, num);
return sum;
}
int sumRootToLeaf(struct TreeNode* root){
return root ? _sumRootToLeaf(root, 0) : 0;
}