2014-11-05 54 views
0

我一直在試圖創建一個二進制搜索樹,按照他們的「公司」名稱按照字母順序排序這些結構與遞歸相當長一段時間了。通過結構的運動,以指向指向正確的點,使我很困惑。創建一個簡單的二叉搜索樹

我得到這些錯誤:

GCC -c tree.c

tree.c:在函數 'treeInsert':

tree.c:34:11:錯誤:要求在一些不是一個結構或聯合

tree.c構件「entryPtr」:36:55:錯誤:在一些請求構件「entryPtr」不是一個結構或聯合

樹.c:38:12:error:請求成員'right'在某個不是結構或聯合的地方

tree.c:39:35:error:請求成員'right'在某個地方不是結構或聯盟

tree.c:43:12:錯誤:請求在東西「左」構件不是一個結構或聯合

tree.c:44:35:錯誤:請求構件的東西「左」不是結構或聯合

tree.c:47:3:警告:從不兼容指針類型[默認啓用]傳遞'printTree'的參數1

在文件中包含從tree.c:19:0: tree.h中:36:6:注:預期 '結構treeNode的*',但參數的類型的 '結構treeNode節點' 化妝:* [樹。 O]錯誤1

這裏有結構:

typedef struct companyEntryTag{ 
char * companyName; 
char * companyDescription; 
char * website; 
char * streetAddr; 
char * suiteNumber; 
char * city; 
char * state; 
int zip; 
double latitude; 
double longitude; 
} companyEntry; 

typedef struct treeNodeTag{ 
companyEntry * entryPtr; 
struct treeNodeTag * left; 
struct treeNodeTag * right; 
} treeNode; 

typedef struct listNodeTag{ 
companyEntry * entryPtr; 
struct listNodeTag * next; 
} listNode; 

我已經嘗試了很多不同的解決方案,但這裏是我當前的功能我用盡量要做到這一點,這得到了上述錯誤:

int treeInsert(listNode * list, treeNode ** rootPtr) 
{ 
    if(list == NULL){return -1;} 

    //Make the root next point to what list is 
    *rootPtr->entryPtr = list->entryPtr; 

    if(strcmp(list->next->entryPtr->companyName, rootPtr->entryPtr->companyName)==1) 
    { 
    rootPtr->right->entryPtr = list->next; 
    treeInsert(list->next, rootPtr->right->entryPtr); 
    } 
    else 
    { 
    rootPtr->left->entryPtr = list->next; 
    treeInsert(list->next, rootPtr->left->entryPtr); 
    } 

    printTree(rootPtr); 

    return 0; 
} 

我不完全確定現在的錯誤告訴我,我嘗試了所有這些不同的方式來實現函數。我都混亂了,會喜歡一些幫助!

回答

0

它應該是(*rootPtr)->entryPtr,而不是*rootPtr->entryPtrrootPtr->entryPtr

由於運營商的優先級,*rootPtr->entryPtr確實是*(rootPtr->entryPtr)

+0

什麼時候我試圖做這樣的事情:rootPtr-> right-> entryPtr = list-> next; .......它告訴我,這是一個請求的東西,這不是一個結構 – Ryan 2014-11-05 03:43:28

+0

更改爲'(* rootPtr) - >右 - > entryPtr =列表 - >下一個;' – timrau 2014-11-05 03:48:33

+0

謝謝你,我得到它! – Ryan 2014-11-05 03:50:33