バイナリ検索ツリーで最大の葉まで途中のすべてのノードを合計しようとしています。ノードには正の数のみが含まれます。BSTで最大の葉までの要素の合計
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <time.h>
typedef int ElType;
typedef struct Tree {
ElType key;
struct Tree *left;
struct Tree *right;
} Tree;
Tree* InsertBST(Tree* t, int k)
{
if (t == NULL) {
Tree* w = (Tree*) malloc(sizeof(Tree));
w->key = k;
w->left = NULL;
w->right = NULL;
return w;
}
if (k <= t->key)
t->left = InsertBST(t->left, k);
else
t->right = InsertBST(t->right, k);
return t;
}
int SumMaxOfBST(Tree* t, int *sum_max)
{
if (t == NULL) {
*sum_max = -1;
return *sum_max;
}
if (t->right == NULL) {
*sum_max += t->key;
return *sum_max;
}
*sum_max += t->key;
*sum_max += SumMaxOfBST(t->right, sum_max);
return *sum_max;
}
int main()
{
int i;
srand (time(NULL));
Tree* t = NULL;
for (i = 0; i < 20; i++)
t = InsertBST(t, rand() % 1000);
int sum_way = 0;
int a = SumMaxOfBST(t, sum_way);
printf("Sum on the way to the largest leaf %d:\n", a);
return 0;
}
これは、ゼロ以外のステータスで終了します。私の強い疑念は、私はポインタの使用を躊躇しているが、ポインタの使用に関するいくつかの書き換えやビデオの後に、私はまだ何が起こっているのか把握していないようだ。私が正しく理解している場合、*sum_max += x
はsum_max
の値をx
だけ増やす必要があります。どの時点でポインタを使用していますか?
あなたのコンパイラは、 'int a = SumMaxOfBST(t、sum_way);'の呼び出しで 'sum_way'の前に'& 'がないと不平を言わなければなりません。あなたのコンパイラの警告に気をつけてください。少なくとも、あなたのC言語のコーディングのこの段階では、コンパイラは間違っています。 –
また、 ''は 'malloc()'などを宣言しています。ヘッダーの拡張機能を使用していない限り、 ''を含める必要はありません。また、あなたのコードでは、あなたが得た答えが正しいかどうかを確認する方法はありません。ツリーを印刷しないので、計算が正しいかどうかを知る方法がありません。 –