输入:root = [1,0,1,0,1,0,1]
输出:22
解释:(100) + (101) + (110) + (111) = 4 + 5 + 6 + 7 = 22
解题思路
本题使用 二叉树的深度遍历。
其中,pathval
计算各路径和,sum
统计路径和。
计算二进制的和 pathval = (pathval << 1) + root->val;
void dfs(struct TreeNode* root, int pathval, int *sum)
{
if(root == NULL) return;
pathval = (pathval << 1) + root->val;
// 到了叶子节点
if(root->left == NULL && root->right == NULL)
*sum += pathval;
// 递归深度遍历左右子树
dfs(root->left, pathval, sum);
dfs(root->right, pathval, sum);
}
int sumRootToLeaf(struct TreeNode* root){
int sum = 0;
dfs(root, 0, &sum);
return sum;
}