Я пытаюсь создать двоичное дерево поиска, которое сортируется в алфавитном порядке в соответствии с их «фирменным» именем из этих структур с рекурсией уже довольно давно. Движение через структуры, чтобы заставить указатели указывать на правильные пятна, меня сильно сбивает с толку.Создание простого двоичного дерева поиска
Я получаю эти ошибки:
GCC -c tree.c
tree.c: В функции 'treeInsert':
tree.c: 34: 11: ошибка: запрос для члена «entryPtr» в чем-то не структуры или объединения
tree.c: 36: 55: ошибка: запрос члена «entryPtr» в чем-то не структуры или объединения
дерева .c: 38: 12: ошибка: запрос для члена 'право' в чем-то не структура или объединение
tree.c: 39: 35: error: запрос для члена 'right' в чем-то не структура или объединение
tree.c: 43: 12: ошибка: запрос члена «левого» в чем-то не структуры или объединения
tree.c: 44: 35: ошибка: запрос члена «левый» в чем-то не структура или объединение
tree.c: 47: 3: предупреждение: передается аргумент 1 из 'printTree' из несовместимого типа указателя [включен по умолчанию]
В файле включены в tree.c: 19: 0: tree.h: 36: 6: Примечание: ожидаемый 'структура TreeNode *', но аргумент типа 'STRUCT TreeNode ' грим: * [дерево. о] Ошибка 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-> right-> entryPtr = list-> next; ....... Это говорит мне, что это запрос для члена в том, что не является структурой – Ryan
Изменить на '(* rootPtr) -> right-> entryPtr = list-> next;' – timrau
Спасибо, человек, я получил Это! – Ryan