2014-11-05 4 views
0

Я пытаюсь создать двоичное дерево поиска, которое сортируется в алфавитном порядке в соответствии с их «фирменным» именем из этих структур с рекурсией уже довольно давно. Движение через структуры, чтобы заставить указатели указывать на правильные пятна, меня сильно сбивает с толку.Создание простого двоичного дерева поиска

Я получаю эти ошибки:

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

Я не совсем уверен в том, что об ошибках говорит мне сейчас, что я пробовал все эти различные способы реализации функции. Я все перепутал и хотел бы помочь!

ответ

0

Это должно быть (*rootPtr)->entryPtr, а не *rootPtr->entryPtr или rootPtr->entryPtr.

Из-за приоритета оператора *rootPtr->entryPtr действительно *(rootPtr->entryPtr).

+0

Что делать, когда я пытаюсь сделать что-то вроде этого: rootPtr-> right-> entryPtr = list-> next; ....... Это говорит мне, что это запрос для члена в том, что не является структурой – Ryan

+0

Изменить на '(* rootPtr) -> right-> entryPtr = list-> next;' – timrau

+0

Спасибо, человек, я получил Это! – Ryan

Смежные вопросы