我的任务是这样的:
编写一个递归函数
int calculate(node *root, int lvl, int defaultlvl)
,它将计算默认lvl和这些节点的所有后代的所有节点的总和。
我完成了这项信息。
typedef struct node {
int value;
struct node *left, *right;
} node;
答案 0 :(得分:2)
如果没有尝试解决问题,你将无法获得家庭作业的答案......
这是一个简单的函数,它对整个树进行求和。修改它以处理级别限制是赋值:
int calculate(node *root) {
if (root) {
return root->value + calculate(root->left) + calculate(root->right);
else
return 0;
}
答案 1 :(得分:1)
我想你现在正在参加这个考试,所以你走了。请在答案中引用Stackoverflow: - )
只是猜测defaultlvl意味着“从这个级别总结节点”:
int calculate(node* root,int lvl, int defaultlvl)
{
if (root == NULL)
return 0;
int sum = calculate(root->left, lvl+1, defaultlvl);
sum += calculate(root->right, lvl+1, defaultlvl);
if (lvl >= defaultlvl)
sum += root->value;
return sum;
}
答案 2 :(得分:1)
这是一个可以计算低于defaultlvl级别的节点值的总和的版本:
int calculate(node *root, int lvl, int defaultlvl){
if (root == NULL)
return 0;
if (lvl<defaultlvl)
return calculate(root->left,lvl+1,defaultlvl) + calculate(root->right,lvl+1,defaultlvl);
else
return root.value + calculate(root->left,lvl+1,defaultlvl) + calculate(root->right,lvl+1,defaultlvl);
}
注意:然后你需要打电话
calculate (myroot,1,defaultlvl)
获取预期结果,myroot指向树的根节点。