无法解决考试任务。(C中的树)

时间:2017-01-21 21:32:00

标签: c

我的任务是这样的:

  

编写一个递归函数int calculate(node *root, int lvl, int defaultlvl),它将计算默认lvl和这些节点的所有后代的所有节点的总和。

我完成了这项信息。

typedef struct node {
    int value;
    struct node *left, *right;
} node;

3 个答案:

答案 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指向树的根节点。