Бинарное дерево не создается - C (СИ)

Узнай цену своей работы

Формулировка задачи:

здраствуйте я написал функцию создания и записи в дерево но она не работает.
    ptree Form()
{
    ptree root=NULL;
    char info;
    scanf("%c",&info);
    if(info!='*')
    {
        root=Mem;
        root->info=info;
        root->left=Form();
        root->right=Form();
    }
    else
        root=NULL;
    return root;
 
}
что нужно сделать? заранее спасибо

Решение задачи: «Бинарное дерево не создается»

textual
Листинг программы
#include <string.h>
#include <locale.h> 
#define Mem (ptree)malloc(sizeof(ttree))
 
typedef struct tree
{  
    int info;
    struct tree *left;
    struct tree *right;
}ttree, *ptree ;
 
ptree Form();
int schet(ptree root, char inf);
 
    ptree Form()
{
    ptree root=NULL;
    int info;
    scanf("%i",&info);
    if(info!=0)
    {
        root=Mem;
        root->info=info;
        root->left=Form();
        root->right=Form();
    }
    else
        root=NULL;
    return root;
 
}
int schet(ptree root, char inf)
{
    int i=0,rez_left,rez_right;
 
    if (root!=NULL)
    {
        if(root->info==inf)
            i=1;
        rez_left=i+schet(root->left,inf);
        rez_right=i+schet(root->right,inf);
        
        if(rez_right>rez_left)
            return rez_right;
        else
            return rez_left;
 
    }
    else
        return i;
}
 
void main()
{
    setlocale(LC_ALL,"Rus");   
    ptree root;
    int info;
    int rez;
    printf("введите элементы дерева(для завершения образования  ветки введите 0)\n");
    root=Form();
    printf("введите число \n");
    scanf("%i",&info);
    rez=schet( root, info);
    if (rez==0)
        printf("такого числа нет\n");
    else
        printf("до числа %i максимальная длина  %i \n",info,rez);
    
    system("pause");
}

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

В данном коде реализуется бинарное дерево, но оно не создается полностью, а только дочерние узлы. Код начинается с определения структуры дерева и двух функций: Form() и schet(). Функция Form() отвечает за создание нового узла дерева. Если пользователь вводит ноль, то функция возвращает NULL, иначе она выделяет память под новый узел, заполняет его информацией и вызывает себя рекурсивно для создания дочерних узлов. Функция schet() отвечает за подсчет количества узлов в левой и правой поддеревьях и возвращает максимальное значение из этих двух подсчетов. Если введенное число совпадает с информацией в текущем узле, то функция увеличивает счетчик. В функции main() устанавливается локальная настройка на русский язык, затем создается корневой узел дерева, вызывается функция Form() для его заполнения, после чего пользователю предлагается ввести число для проверки наличия в дереве. После ввода числа вызывается функция schet(), которая возвращает количество узлов в поддереве с данным числом. Если это число отсутствует в дереве, выводится сообщение такого числа нет, иначе выводится сообщение вида до числа X максимальная длина Y, где X - искомое число, Y - максимальная длина поддерева с этим числом.

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


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

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

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