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) {
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() {