-2
ここで面白い質問があります。私が与えられた課題は、ルートからリーフまでのツリーの最大合計を計算する必要があるということです。この場合、それは14です。問題は、正確なパスの長さを数え、そのパス長との和を分割する必要があるため、やはりそれを返す必要があるということです。地獄が複雑に聞こえるのは間違いないが、最初はとても簡単だと思ったが、特定の経路でノードを数える方法を見つけることができなかった。関数count()
全体が誤ってアセンブルされている可能性があります。より多くの質問がある場合はemを書き留めてください、私はこれが答える必要があります。ありがとう!私はあなたのコードを調整しますが、すべてを変更したくないノード値の最大合計を数え、合計を与える特定のパスを数える[C]
#include <stdio.h>
#include <stdlib.h>
struct tree{
int i;
struct tree *left;
struct tree *right;
};
int count(struct tree *root);
int max(int,int);
int main()
{
struct tree *p=NULL, *q=NULL, *r=NULL, *t=NULL;
//1
p=(struct tree *)malloc(sizeof(struct tree));
if(p==NULL) exit(1);
p->i=1;
p->left=NULL;
p->right=NULL;
//2
q=(struct tree *)malloc(sizeof(struct tree));
if(q==NULL) exit(1);
q->i=2;
q->left=NULL;
q->right=NULL;
p->left=q;
//3
r=(struct tree *)malloc(sizeof(struct tree));
if(r==NULL) exit(1);
r->i=3;
r->left=NULL;
r->right=NULL;
p->right=r;
t=q;
//4
q=(struct tree *)malloc(sizeof(struct tree));
if(q==NULL) exit(1);
q->i=4;
q->left=NULL;
q->right=NULL;
t->left=q;
//5
q=(struct tree *)malloc(sizeof(struct tree));
if(q==NULL) exit(1);
q->i=5;
q->left=NULL;
q->right=NULL;
t->right=q;
t=q;
//6
q=(struct tree *)malloc(sizeof(struct tree));
if(q==NULL) exit(1);
q->i=6;
q->left=NULL;
q->right=NULL;
t->left=q;
//7
q=(struct tree *)malloc(sizeof(struct tree));
if(q==NULL) exit(1);
q->i=7;
q->left=NULL;
q->right=NULL;
r->right=q;
printf("The sum is %d!",count(p));
}
int count(struct tree *root){
if(root->left!=NULL && root->right!=NULL){
return root->i+max(count(root->left),count(root->right));
}
else if(root->left==NULL && root->right!=NULL){
return root->i+count(root->right);
}
else if(root->left!=NULL && root->right==NULL){
return root->i+count(root->left);
}
else{
return root->i;
}
}
int max(int a, int b){
if(a>b){
return a;
}
else{
return b;
}
}
「地獄が複雑に聞こえるように」 - それもそうではありません。しかし、私たちは「宿題をする」サイトではありません。 See [ask]。あなたの**具体的な**問題は何ですか?何を試しましたか? – Olaf
私はすべてを試みましたが、それはうまくいかなかったのですが、それがなぜかわかりません - 私は解決策を見つけることができません。問題は単純です - この関数は私にルートからリーフまで最高の合計を与えますが、これらの特定のノードをどのように数えるかを理解することはできません。 –
この(サブ)パスの長さを保持する 'count()'に追加のパラメータ 'int * pathlen'を渡さないのはなぜですか?あなたが枝を下ろして休憩に達すると、あなたはそれを1に設定します。上向きに戻っている間、あなたはサブパスからlenを1だけ増やします。 – Gerhardh