Я следую за книгой, Решение проблем & Дизайн программы на C, чтобы узнать C. В этой книге они предоставили все необходимые части для построения двоичного дерева поиска .... Но , Моя реализация не сработала. Вот часть вставки;Двоичный поиск Вставка дерева не работает
void
add_to_t(tree_node_t *oldTreep, // input/output - binary search tree
tree_element_t ele) // input - element to add
{
oldTreep = tree_insert(oldTreep, ele);
}
tree_node_t * tree_insert(tree_node_t *oldTreep, tree_element_t ele)
{
if(oldTreep == NULL){
oldTreep = TYPED_ALLOC(tree_node_t);
strcpy(oldTreep->element.name, ele.name);
strcpy(oldTreep->element.sName, ele.sName);
oldTreep->element.seatClass = ele.seatClass;
oldTreep->leftp = NULL;
oldTreep->rightp = NULL;
}
else if (strcmp(oldTreep->element.name, ele.name)==0){
/* duplicate key - no insertion */
}
else if (strcmp(oldTreep->element.name, ele.name)>0){
oldTreep->rightp = tree_insert(oldTreep->rightp, ele);
}
else
{
oldTreep->leftp = tree_insert(oldTreep->leftp, ele);
}
return(oldTreep);
}
My scan_passenger funvtion (я передаю элементу из результата этого вызова функции);
void scan_passenger(tree_element_t *pass)
{
char passName[10], passSname[10];
int classNum;
printf("\nEnter the Name of passenger to add the binary search tree> ");
scanf("%s", passName);
printf("Enter the Surname of passenger to add the binary search tree> ");
scanf("%s", passSname);
printf("Enter the class number of passenger to add the binary search tree> ");
scanf("%d", &classNum);
strcpy(pass->name, passName);
strcpy(pass->sName, passSname);
pass->seatClass = classNum;
}
И мои typdefs и заголовки, если это необходимо;
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define TYPED_ALLOC(type) (type *)malloc(sizeof (type))
typedef struct tree_element_s {
char name[10];
char sName[10];
int seatClass;
}tree_element_t;
typedef struct tree_node_s {
tree_element_t element;
struct tree_node_s *leftp, *rightp;
}tree_node_t;
Моя проблема заключается в том, что он не создает корень двоичного дерева поиска. Когда я пытаюсь добавить новый элемент в кучу, кажется, он создает новый узел. Когда я отслеживаю свой код, кажется, что каждый экземпляр этих функций возвращает NULL. Я пытаюсь сказать каждый раз, когда я вызываю tree_insert, он идет первым, если утверждение (Thinks root равно NULL) ... Извините за мой плохой английский. И я могу ошибаться, говоря о терминологии кодирования (это может быть потому, что я вернулся к изучению C из этой книги после отсутствия 1 года. Поэтому я могу их смешивать) Спасибо заранее.