diff --git a/cv7/program.c b/cv7/program.c index dd94b39..69e94ce 100644 --- a/cv7/program.c +++ b/cv7/program.c @@ -75,27 +75,34 @@ void run_system(struct tree *node) { } // Функція для читання дерева з вводу -struct tree* read_tree(int *counter) { - char buffer[SIZE]; // Буфер для зберігання рядка - if (fgets(buffer, SIZE, stdin) == NULL || buffer[0] == '\n') { - return NULL; // Якщо рядок порожній або не вдалося прочитати, повертаємо NULL +struct tree* read_tree() { + char buffer[SIZE]; + memset(buffer, 0, SIZE); + + // Read a line from stdin + char* r = fgets(buffer, SIZE, stdin); + assert(r); // Ensure reading was successful + + // Allocate memory for a new tree node + struct tree* node = calloc(1, sizeof(struct tree)); + if (!node) { + printf("Memory allocation failed!\n"); + exit(1); } - struct tree *node = calloc(1, sizeof(struct tree)); // Створюємо новий вузол - if (node == NULL) { - return NULL; // Якщо пам'ять не вдалося аллокувати, повертаємо NULL + // Copy the input line into the node's value + memcpy(node->value, buffer, SIZE); + + // If the line is a leaf node (starts with '*'), no further questions are needed + if (buffer[0] == '*') { + return node; // Leaf node, no need to read further } - strcpy(node->value, buffer); // Копіюємо значення в поле value - node->id = (*counter)++; // Присвоюємо унікальний ідентифікатор вузла + // If not a leaf, recursively read the left and right child nodes + node->left = read_tree(); // Left child (yes answer) + node->right = read_tree(); // Right child (no answer) - // Якщо це не лист, то читаємо лівий та правий підвузли - if (buffer[0] != '*') { - node->left = read_tree(counter); // Рекурсивно читаємо лівий підвузол - node->right = read_tree(counter); // Рекурсивно читаємо правий підвузол - } - - return node; // Повертаємо створений вузол + return node; } int main() {