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 += x
應該增加sum_max
的值x
。我在哪一點使用指針?
你的編譯器應該在調用'int a = SumMaxOfBST(t,sum_way);'時抱怨'sum_way'之前沒有'&'。注意你的編譯器警告 - 編譯器是對的,你錯了,至少在C編程職業的這個階段。 –
另外,''聲明'malloc()'等。除非您使用標題的擴展功能,否則不需要包含「」。此外,您的代碼無法讓您驗證您得到的答案是否正確;你不打印樹,所以你無法知道你的計算是否正確。 –