【问题标题】:Creating a simple Binary Search Tree创建一个简单的二叉搜索树
【发布时间】:2014-11-05 03:35:13
【问题描述】:

我一直在尝试创建一个二叉搜索树,它根据他们的“公司”名称从这些结构中递归地按字母顺序排序已经有一段时间了。通过结构体获取指向正确位置的指针让我很困惑。

我收到以下错误:

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: 错误:请求成员“离开”不是结构或联合

tree.c:44:35: 错误:在非结构或联合中请求成员“左”

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;
}

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

【问题讨论】:

    标签: c algorithm pointers struct tree


    【解决方案1】:

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

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

    【讨论】:

    • 当我尝试做这样的事情时怎么办:rootPtr->right->entryPtr = list->next; .......它告诉我这是对不是结构的成员的请求
    • 更改为(*rootPtr)->right->entryPtr = list->next;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 2015-05-23
    • 2023-03-08
    相关资源
    最近更新 更多