这是我的代码。 我试图插入二进制搜索树,地址指针 当我获得更大的数据节点时,我将离开,反之亦然 但是
获取错误: C:\ Users \ huf \ Documents \ tree.c | 26 | error:请求成员`right'的东西不是结构或联合|
#include <stdio.h>
struct node
{
struct node*left;
int data;
struct node *right;
};
void maketree(struct node **root1, int data1)
{
if((*root1) == NULL)
{
(*root1) = (struct node *)malloc(sizeof(struct node));
(*root1)->data = data1;
(*root1)->left = NULL;
(*root1)->right = NULL;
//printf("%d %d",(*root1)->data,data1);
}
else if(data1 > ((*root1)->data))
{
printf("%d ", (*root1)->data);
maketree((*root1)->right,data1);
}
else if(data1 < (*root1)->data)
{
maketree((*root1)->left,data1);
printf("%d ", (*root1)->data);
}
}
int main()
{
struct node * root = NULL;
//int data;
//data = 5;
maketree(&root,12);
maketree(&root,5);
maketree(&root,9);
maketree(&root,8);
maketree(&root,16);
maketree(&root,10);
return 0;
}
为什么我的指针类型不兼容。
答案 0 :(得分:2)
问题出在maketree((*root1)->right,data1);
行。必须有struct node **root1
(请参阅函数maketree()
的参数),但实际参数为struct node *
。
尝试放置这一行:maketree(&(*root1)->right,data1);
(对于'左'几行来说相同)。
答案 1 :(得分:-2)
问题在于:
(*root1)->data = data1;
root1
的类型为void **
,因此(*root1)
的类型仅为void *
,其中不指向的结构有一个data
成员。
您需要更多地使用struct node
类型,您似乎一心想尽可能地使用void *
。