我正在尝试将路径中的所有节点汇总到二叉搜索树中的最大叶子。节点只包含正数。
#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
。在哪一点上我使用了指针?
答案 0 :(得分:2)
我不明白为什么你把一个指向int的指针作为SumMaxOfBST
的参数,我认为这样写的函数更简单。
int SumMaxOfBST(Tree* t)
{
if (t == NULL) {
return 0;
}
if (t->right == NULL) {
return t->key;
}
return t->+key + SumMaxOfBST(t->right);
}
此外,在您的main
中,您传递的sum_way
是int
,而SumMaxOfBST
则需要int*
。您应该改为&sum_way
。