创建一个简单的二进制搜索树

时间:2014-11-05 03:35:13

标签: c algorithm pointers struct tree

我一直在尝试创建一个二进制搜索树,根据他们的"公司"按字母顺序排序。现在用一段时间的递归来命名这些结构。通过结构的移动使得指针指向正确的位置让我感到困惑。

我收到了这些错误:

gcc -c tree.c

tree.c:在函数'treeInsert'中:

tree.c:34:11:错误:请求成员'entryPtr'不是结构或联合

tree.c:36:55:错误:请求成员'entryPtr'不是结构或联合

tree.c:38:12:错误:在非结构或联合的情况下请求成员“权利”

tree.c:39:35:错误:在非结构或联合的情况下请求成员“权利”

tree.c:43:12:错误:在非结构或联合的内容中请求成员'left'

tree.c:44:35:错误:请求成员'left'不是结构或联合

tree.c:47:3:警告:从不兼容的指针类型[默认启用]传递'printTree'的参数1

在tree.c:19:0中包含的文件中: tree.h:36:6:注意:预期'struct treeNode *'但参数类型为'struct treeNode ' make:* [tree.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;
}

我现在并没有完全确定错误告诉我的是我已经尝试了所有这些不同的方法来实现这个功能。我全都乱了,希望得到一些帮助!

1 个答案:

答案 0 :(得分:0)

应该是(*rootPtr)->entryPtr,而不是*rootPtr->entryPtrrootPtr->entryPtr

由于运算符优先级,*rootPtr->entryPtr确实是*(rootPtr->entryPtr)