簡體   English   中英

創建一個簡單的二進制搜索樹

[英]Creating a simple Binary Search 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;
}

我已經完全嘗試了所有不同的實現函數的方式,現在我不確定這些錯誤告訴我什么。 我全都混亂了,很想幫忙!

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

由於運算符的優先級, *rootPtr->entryPtr實際上是*(rootPtr->entryPtr)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM