制作二叉搜索树时不兼容的指针类型

时间:2014-06-26 06:03:51

标签: c++ c data-structures

这是我的代码。 我试图插入二进制搜索树,地址指针 当我获得更大的数据节点时,我将离开,反之亦然 但是

获取错误: 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;
}

为什么我的指针类型不兼容。

2 个答案:

答案 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 *

另外,don't cast the return value of malloc() in C