바이너리 검색 트리에서 가장 큰 리프에있는 모든 노드를 합산하려고합니다. 노드에는 양수 만 포함됩니다.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;
}
이 상태는 0이 아닌 상태로 종료됩니다. 내 강한 의혹은 포인터의 사용을 망쳤다는 것입니다. 그러나 포인터를 사용하여 여러 번 다시 쓰고 비디오를 작성한 후에도 여전히 어떤 일이 일어나고 있는지 파악하지 못하고 있습니다. 올바르게 이해하면 *sum_max += x
은 sum_max
의 값을 x
까지 증가시켜야합니다. 어떤 시점에서 포인터를 사용합니까?
컴파일러는'int a = SumMaxOfBST (t, sum_way); '호출에서'sum_way' 앞에'&'가 없다는 것에 대해 불평해야합니다. 컴파일러 경고에주의를 기울이십시오. 컴파일러가 맞고 적어도 C 코딩 경력의이 단계에서 여러분이 틀렸을 것입니다. –
또한,''는'malloc()'을 선언합니다. 헤더의 확장 기능을 사용하지 않는 한 ''을 포함 할 필요가 없습니다. 또한 귀하의 코드는 귀하가 얻은 답이 맞는지 여부를 확인할 방법이 없습니다. 트리를 인쇄하지 않으므로 계산이 올바른지 알 수 없습니다. –