Бинарное дерево не создается - 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;
- }
Решение задачи: «Бинарное дерево не создается»
- #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 - максимальная длина поддерева с этим числом.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д