У меня довольно запутанная проблема при построении бинарного дерева. Очевидно, это должно быть легкой задачей, но как-то я могу испортить указатели в ней.
Вот упрощенный код (конечно, это не настоящий код):
#include <string.h>
#include <iostream>
using namespace std;
#define DIM1 2
typedef enum {LEFT,RIGHT} direction;
typedef char tName[MAX_NAME_LEN + 1];
struct Rectangle {
tName _name;
struct Rectangle *_binSon[DIM1];
};
struct Rectangle *recTree;
void insertRectToTree(char str[]){
struct Rectangle rect;
struct Rectangle *point;
struct Rectangle *parent;
strcpy(rect._name,str);
rect._binSon[RIGHT] = NULL;
rect._binSon[LEFT] = NULL;
point = ▭
if (recTree == NULL){
recTree = point;
} else {
struct Rectangle *current;
current = recTree;
while (current){
parent = current;
if (strcmp(point -> _name, current -> _name) > 0){
current = current -> _binSon[RIGHT];
} else {
current = current -> _binSon[LEFT];
}
}
if (strcmp(point -> _name, parent -> _name) < 0){
parent -> _binSon[LEFT] = point;
} else {
parent -> _binSon[RIGHT] = point;
}
}
}
int main(){
recTree = NULL;
char str[] = "LIKE";
insertRectToTree(str);
char str2[] = "GUIDE";
insertRectToTree(str2);
printf(recTree -> _name);
return 0;
}
Как вы можете видеть, это двоичное дерево пытается организовать запись на основе его имени, поэтому наименьший алфавитный порядок будет идти слева и т. Д.
Проблема в том, что после первой вставки «LIKE» я хочу, чтобы «GUIDE» также вставлялся в дерево, а «LIKE» по-прежнему оставался корневым. Тем не менее, printf () показывает, что «GUIDE» становится корнем. (Другими словами, «GUIDE» - это выход). Есть хорошее объяснение этому? Спросите меня, нужно ли мне добавить еще кое-что к этому вопросу. Спасибо за всю твою помощь.