При обходе дерева выводятся пустые строки - 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, что означает успешный конец работы программы.