2014-06-26 25 views
0

這是我的代碼。 我想在二叉搜索樹插入,與地址指針 當我挺大的數據節點我會離開,反之亦然 但製作二進制搜索樹時不兼容的指針類型

四處錯誤: C:\用戶\ HUF \文檔\樹.c | 26 |錯誤:在不是結構或聯合的東西中請求成員'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

這裏有什麼問題?爲什麼這個問題還沒有結束? – Ilya

回答

2

問題是在線maketree((*root1)->right,data1);。必須有struct node **root1(請參閱功能maketree()的參數),但實際參數是struct node *

試着把這條線:maketree(&(*root1)->right,data1);(和「左」幾行相同)。

-2

的問題是在這裏:

(*root1)->data = data1; 

root1類型爲void **,所以(*root1)類型只是void *,這點具有data成員的結構。

您需要更多地使用struct node類型,您似乎很想盡量使用void *

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