Update cv7/program.c

This commit is contained in:
Viktor Daniv 2024-11-15 01:06:46 +00:00
parent 85ccde403a
commit 99de8b201c

View File

@ -75,27 +75,34 @@ void run_system(struct tree *node) {
} }
// Функція для читання дерева з вводу // Функція для читання дерева з вводу
struct tree* read_tree(int *counter) { struct tree* read_tree() {
char buffer[SIZE]; // Буфер для зберігання рядка char buffer[SIZE];
if (fgets(buffer, SIZE, stdin) == NULL || buffer[0] == '\n') { memset(buffer, 0, SIZE);
return NULL; // Якщо рядок порожній або не вдалося прочитати, повертаємо NULL
// 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)); // Створюємо новий вузол // Copy the input line into the node's value
if (node == NULL) { memcpy(node->value, buffer, SIZE);
return NULL; // Якщо пам'ять не вдалося аллокувати, повертаємо NULL
// 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 // If not a leaf, recursively read the left and right child nodes
node->id = (*counter)++; // Присвоюємо унікальний ідентифікатор вузла node->left = read_tree(); // Left child (yes answer)
node->right = read_tree(); // Right child (no answer)
// Якщо це не лист, то читаємо лівий та правий підвузли return node;
if (buffer[0] != '*') {
node->left = read_tree(counter); // Рекурсивно читаємо лівий підвузол
node->right = read_tree(counter); // Рекурсивно читаємо правий підвузол
}
return node; // Повертаємо створений вузол
} }
int main() { int main() {