2014-11-05 67 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