从结构创建 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 声明是个坏主意。它只会让代码的读者感到困惑。