2017-01-21 5 views
-4

私のタスクは、次のように起こっている:。カント解決タスク(Cで木)

は、デフォルトのLVLと、これらのノードのすべてのprogenysですべてのノードの合計を計算します再帰関数int calculate(node *root, int lvl, int defaultlvl)を書きます。

私はこの情報を自分の仕事に入れました。

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

CとC++は2つの異なる言語です。どちらを使用しているのかは本当に決定する必要があります。 –

+0

割り当てが混乱しています。おそらく、各ノードの 'value'メンバーを合計することを意味しますが、* default lvl *とは何ですか?また、これらのノードのすべての子孫(*子孫*)を含むので、どのように適用されますか? – chqrlie

+1

あなたの質問は何ですか?誰かがあなたに完全なソリューションを提供すると本当に期待していますか?試してみて、その試行について*具体的な質問をしてください。または、あなたがあなたの試みを進めるための理解を明確にするのに役立つ具体的なものについて質問してください。 – kaylum

答えて

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); 

}

NB:あなたはその後、 calculate (myroot,1,defaultlvl)を呼び出す必要がありますを使用して、myrootを使用してツリーのルートノードへのポインタを返します。

2

あなたが問題を解決しようとする時にいくつかの努力を示すことなく、宿題のための答えを得ることはありません...ここで

は、ツリー全体を合計する単純な関数です。レベル制限を処理するように修正してください:

int calculate(node *root) { 
    if (root) { 
     return root->value + calculate(root->left) + calculate(root->right); 
    else 
     return 0; 
} 
1

あなたは今この試験を受けていると思いますので、ここに行きます。 defaultlvlは「上でこのレベルからノードをまとめる」を意味していること

:-)あなたの答えだけの推測でStackOverflowのを引用してください:ここでは

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; 
} 
+0

Thxみんな大好き!私は整数を設定することができます=計算(ルート - >左、lvl + 1、defaultlvl)+計算(ルート - >右、lvl + 1、defaultlvl); sum + = calculate(root-> right、lvl + 1、defaultlvl)を書くのではなく、 –

+0

あなたは大歓迎です。はい、できます。 –