У меня проблема со сравнением root и значения, которое будет вставлено.
Я пытаюсь прочитать имена из txt-файла и построить двоичное дерево (сравнение по алфавиту) .
Проблема, с которой я сталкиваюсь, заключается в том, что root -> name и value-> name становятся одинаковыми, что не должно происходить.
Например,
, если имена в текстовом файле:
alex
brian
chris
сначала, поскольку rootNode имеет значение NULL, функция вставки должна изменить свое имя root на alex. Затем следует сравнить новое имя (brian) с именем корневого узла (alex). Затем установите новый узел (brian) в rightNode корневого узла (alex). но, похоже, этого не происходит.
Что я делаю не так? Как бы я подошел к этой проблеме?
Спасибо!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct binaryTree{
char* name;
struct binaryTree* leftNode;
struct binaryTree* rightNode;
};
struct binaryTree* insert(struct binaryTree* root, struct binaryTree* value);
struct binaryTree* init(char* val);
int main() {
struct binaryTree* rootNode = NULL;
char name[100];
int numWords;
int searchNum;
int deleteNum;
struct binaryTree* tempNode;
FILE *fPtr;
if ((fPtr = fopen("in.txt", "r")) == NULL){
printf("Error. No File Found");
exit(1);
}
for(int i = 0; i < 3; i ++){
fscanf(fPtr, "%d", &numWords);
fscanf(fPtr, "%d", &searchNum);
fscanf(fPtr, "%d", &deleteNum);
}
printf("%d %d %d", numWords, searchNum, deleteNum);
for (int i = 0; i <numWords; i ++){
fscanf(fPtr, "%s", name);
tempNode = init(name);
rootNode = insert(rootNode, tempNode);
}
return 0;
}
struct binaryTree* insert(struct binaryTree* root, struct binaryTree* value){
if (root == NULL){
printf("value = %s\n",value->name);
return value;
}
else{
if(strcmp(root->name, value->name)>0){
if(root->rightNode != NULL){
printf("inserting right");
root->rightNode = insert(root->rightNode,value);
}
else{
root->rightNode = value;
}
}
else if(strcmp(root->name, value->name)<0){
printf("inserting left\n");
if(root->leftNode != NULL){
root->leftNode = insert(root->leftNode,value);
}
else{
root->leftNode = value;
}
}
else{
printf("the names are same");
}
return root;
}
}
struct binaryTree* init(char* val){
struct binaryTree* temp;
temp = (struct binaryTree*)malloc(sizeof(struct binaryTree));
temp->name = val;
temp->leftNode = NULL;
temp->rightNode = NULL;
return temp;
}