2017-05-14 11 views
0

バイナリ検索ツリーで最大の葉まで途中のすべてのノードを合計しようとしています。ノードには正の数のみが含まれます。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 += xsum_maxの値をxだけ増やす必要があります。どの時点でポインタを使用していますか?

+1

あなたのコンパイラは、 'int a = SumMaxOfBST(t、sum_way);'の呼び出しで 'sum_way'の前に'& 'がないと不平を言わなければなりません。あなたのコンパイラの警告に気をつけてください。少なくとも、あなたのC言語のコーディングのこの段階では、コンパイラは間違っています。 –

+0

また、 ''は 'malloc()'などを宣言しています。ヘッダーの拡張機能を使用していない限り、 ''を含める必要はありません。また、あなたのコードでは、あなたが得た答えが正しいかどうかを確認する方法はありません。ツリーを印刷しないので、計算が正しいかどうかを知る方法がありません。 –

答えて

2

SumMaxOfBSTの引数としてintへのポインタを取る理由がわかりませんが、このように書かれた関数は簡単だと思います。 SumMaxOfBSTint*を期待しながら、あなたのmain

さらに
int SumMaxOfBST(Tree* t) 
{ 
    if (t == NULL) { 
     return 0; 
    } 
    if (t->right == NULL) { 
     return t->key; 
    } 
    return t->+key + SumMaxOfBST(t->right); 
} 

は、あなたは、intあるsum_wayを渡しています。代わりに&sum_wayに渡す必要があります。

+0

ありがとう、これは確かに私の試みよりも多くのクリーナーです。 – Zelazny

関連する問題