При обходе дерева выводятся пустые строки - C (СИ)
Формулировка задачи:
Вот код. Когда делает обход выводит пустоту. Что я делаю не так?
#include <stdio.h> #include <locale.h> #include <stdlib.h> typedef struct tree { int data; struct tree *left, *right; }; struct tree *Tree; int n,j=0; void add(struct tree *Tree,int x) { if (Tree==NULL) { Tree=(struct tree *)malloc(sizeof(struct tree)); (*Tree).data=x; (*Tree).left=NULL; (*Tree).right=NULL; j++; } else if (x<(*Tree).data) add((*Tree).left,x); else add((*Tree).right,x); } void LKP(struct tree *Tree) { if (Tree!=NULL) { LKP((*Tree).left); printf("%i ",(*Tree).data); LKP((*Tree).right); } } int main(void) { setlocale(LC_ALL,"RU"); printf("Введите количество элементов дерева: "); int x; scanf("%i",&n); for(int i=0;i<n;i++) { printf("Введите %i-й элемент дерева: ",i+1); scanf("%i",&x); add(Tree,x); } LKP(Tree); printf("\n"); return 0; }
Решение задачи: «При обходе дерева выводятся пустые строки»
textual
Листинг программы
#include <stdio.h> #include <locale.h> #include <stdlib.h> typedef struct tree { int data; struct tree *left, *right; }; struct tree *Tree; int n,j=0; struct tree* add(struct tree *root, int x) { if (root==NULL) { root=(struct tree *)malloc(sizeof(struct tree)); root->data=x; root->left=NULL; root->right=NULL; //j++;//??? } else if (x<(root->data)) root->left=add(root->left,x); else root->right=add(root->right,x); return root; } void LKP(struct tree *root) { if (root!=NULL) { LKP(root->left); printf("%i ",root->data); LKP(root->right); } } int main(void) { setlocale(LC_ALL,"russian"); printf("Введите количество элементов дерева: "); int x; scanf("%i",&n); for(int i=0;i<n;i++) { printf("Введите %i-й элемент дерева: ",i+1); scanf("%d",&x); Tree=add(Tree,x); } LKP(Tree); printf("\n"); return 0; }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы:
для работы с I/O, для локалилизации ввода-вывода, для работы с памятью. - Объявляется структура данных
дерево
с полями: data (данные), left (левое поддерево), right (правое поддерево). - Инициализируется глобальная переменная Tree как NULL (пустое дерево).
- В функции main() считывается количество элементов дерева, а затем в цикле с помощью функции scanf() считываются сами элементы и добавляются в дерево с помощью рекурсивной функции add().
- Затем с помощью функции LKP() происходит обход дерева (последовательный просмотр всех узлов) и выводится на экран.
- В конце программы выводится символ новой строки
\n
для перехода на следующую строку. - Возвращается 0, что означает успешный конец работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д