При обходе дерева выводятся пустые строки - 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;
}

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы: для работы с I/O, для локалилизации ввода-вывода, для работы с памятью.
  2. Объявляется структура данных дерево с полями: data (данные), left (левое поддерево), right (правое поддерево).
  3. Инициализируется глобальная переменная Tree как NULL (пустое дерево).
  4. В функции main() считывается количество элементов дерева, а затем в цикле с помощью функции scanf() считываются сами элементы и добавляются в дерево с помощью рекурсивной функции add().
  5. Затем с помощью функции LKP() происходит обход дерева (последовательный просмотр всех узлов) и выводится на экран.
  6. В конце программы выводится символ новой строки \n для перехода на следующую строку.
  7. Возвращается 0, что означает успешный конец работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.231 из 5
Похожие ответы