从结构创建 BST 的节点时出现编译错误
Compilation error on creating nodes of a BST from a struct
在我的代码中,有一个二叉树结构定义为:
typedef struct bintreestruct *bintree;
struct bintreestruct
{
double num;
char *s;
bintree l, r;
};
我想在这个二叉搜索树中插入一个节点。这是函数:
void insbintree(double i, char *s, bintree *t)
{
if (t == NULL)
{
bintree temp = (struct bintreestruct *)malloc(sizeof(struct bintreestruct));
temp->s = s;
temp->num = i;
temp->l = temp->r = NULL;
return temp;
}
if (strcmp(s, t->s) < 0)
t->l = insert(t->l, s);
else if (strcmp(s, t->s) >= 0)
t->r = insert(t->r, s);
return t;
}
我遇到错误 error: ‘*t’ is a pointer; did you mean to use ‘->’? 62 | if (strcmp(s, t->s) < 0)
要么我错误地创建了新节点,要么访问了 in
中的元素
使用指针的错误方法。不确定如何更正此错误
您似乎正在尝试编写递归函数,因为它会调用自身。
由于函数有 return 语句和表达式,因此它的 return 类型不应是 void
.
此外,由于此类型定义
,此参数声明 bintree *t
等同于 struct bintreestruct **
typedef struct bintreestruct *bintree;
但是在函数中,您正试图将其用作 struct bintreestruct *
.
类型
并且在函数本身的这些调用中
t->l = insert(t->l, s);
t->r = insert(t->r, s);
使用了不完整且排序不正确的参数列表。
考虑到所有这些,至少可以按以下方式声明和定义函数
bintree insbintree(double i, char *s, bintree t)
{
if (t == NULL)
{
t = malloc( sizeof( struct bintreestruct ) );
t->s = s;
t->num = i;
t->l = t->r = NULL;
}
else if ( strcmp(s, t->s) < 0 )
{
t->l = insert(i, s, t->l);
}
else
{
t->r = insert(i, s, t->r );
}
return t;
}
请注意,对指针类型使用 typedef 声明是个坏主意。它只会让代码的读者感到困惑。
在我的代码中,有一个二叉树结构定义为:
typedef struct bintreestruct *bintree;
struct bintreestruct
{
double num;
char *s;
bintree l, r;
};
我想在这个二叉搜索树中插入一个节点。这是函数:
void insbintree(double i, char *s, bintree *t)
{
if (t == NULL)
{
bintree temp = (struct bintreestruct *)malloc(sizeof(struct bintreestruct));
temp->s = s;
temp->num = i;
temp->l = temp->r = NULL;
return temp;
}
if (strcmp(s, t->s) < 0)
t->l = insert(t->l, s);
else if (strcmp(s, t->s) >= 0)
t->r = insert(t->r, s);
return t;
}
我遇到错误 error: ‘*t’ is a pointer; did you mean to use ‘->’? 62 | if (strcmp(s, t->s) < 0)
要么我错误地创建了新节点,要么访问了 in
中的元素
使用指针的错误方法。不确定如何更正此错误
您似乎正在尝试编写递归函数,因为它会调用自身。
由于函数有 return 语句和表达式,因此它的 return 类型不应是 void
.
此外,由于此类型定义
,此参数声明bintree *t
等同于 struct bintreestruct **
typedef struct bintreestruct *bintree;
但是在函数中,您正试图将其用作 struct bintreestruct *
.
并且在函数本身的这些调用中
t->l = insert(t->l, s);
t->r = insert(t->r, s);
使用了不完整且排序不正确的参数列表。
考虑到所有这些,至少可以按以下方式声明和定义函数
bintree insbintree(double i, char *s, bintree t)
{
if (t == NULL)
{
t = malloc( sizeof( struct bintreestruct ) );
t->s = s;
t->num = i;
t->l = t->r = NULL;
}
else if ( strcmp(s, t->s) < 0 )
{
t->l = insert(i, s, t->l);
}
else
{
t->r = insert(i, s, t->r );
}
return t;
}
请注意,对指针类型使用 typedef 声明是个坏主意。它只会让代码的读者感到困惑。