У меня есть следующая задача: создать двоичное дерево поиска из строк, а затем распечатать их в алфавитном порядке.
Как пример,
orange
melon
apple
grapes
plum
banana
должно иметь
apple
banana
grapes
melon
orange
plum
как вывод. Я написал решение, но у меня есть проблема: печатается только последняя строка ввода (в данном примере это banana
), и я не могу найти ошибку в своем коде.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Node {
char *data;
struct Node *left;
struct Node *right;
} Node;
Node* getFreeNode(char *value) {
Node* tmp = (Node*)malloc(sizeof(Node));
tmp->left = tmp->right = NULL;
tmp->data = value;
return tmp;
}
void insert(Node **head, char *value) {
Node* tmp = (Node*)malloc(sizeof(Node));
tmp = *head;
if (*head == NULL) {
*head = getFreeNode(value);
return;
}
else{
if (strcmp(value, tmp->data) > 0) {
return insert(&(tmp->right), value);
}
else if (strcmp(value, tmp->data) < 0) {
return insert(&(tmp->left), value);
}
}
}
void print_tree(Node *t)
{
if (!t) return;
print_tree(t->left);
printf("%s\n", t->data);
print_tree(t->right);
}
int main(){
Node* a = NULL;
FILE *in = fopen("input.txt", "r");
freopen("output.txt", "w", stdout);
char word[20];
while (fscanf(in, "%s", word) == 1){
insert(&a, word);
}
print_tree(a);
return 0;
}