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

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

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

здраствуйте я написал функцию создания и записи в дерево но она не работает.
Листинг программы
  1. ptree Form()
  2. {
  3. ptree root=NULL;
  4. char info;
  5. scanf("%c",&info);
  6. if(info!='*')
  7. {
  8. root=Mem;
  9. root->info=info;
  10. root->left=Form();
  11. root->right=Form();
  12. }
  13. else
  14. root=NULL;
  15. return root;
  16. }
что нужно сделать? заранее спасибо

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

textual
Листинг программы
  1. #include <string.h>
  2. #include <locale.h>
  3. #define Mem (ptree)malloc(sizeof(ttree))
  4.  
  5. typedef struct tree
  6. {  
  7.     int info;
  8.     struct tree *left;
  9.     struct tree *right;
  10. }ttree, *ptree ;
  11.  
  12. ptree Form();
  13. int schet(ptree root, char inf);
  14.  
  15.     ptree Form()
  16. {
  17.     ptree root=NULL;
  18.     int info;
  19.     scanf("%i",&info);
  20.     if(info!=0)
  21.     {
  22.         root=Mem;
  23.         root->info=info;
  24.         root->left=Form();
  25.         root->right=Form();
  26.     }
  27.     else
  28.         root=NULL;
  29.     return root;
  30.  
  31. }
  32. int schet(ptree root, char inf)
  33. {
  34.     int i=0,rez_left,rez_right;
  35.  
  36.     if (root!=NULL)
  37.     {
  38.         if(root->info==inf)
  39.             i=1;
  40.         rez_left=i+schet(root->left,inf);
  41.         rez_right=i+schet(root->right,inf);
  42.        
  43.         if(rez_right>rez_left)
  44.             return rez_right;
  45.         else
  46.             return rez_left;
  47.  
  48.     }
  49.     else
  50.         return i;
  51. }
  52.  
  53. void main()
  54. {
  55.     setlocale(LC_ALL,"Rus");  
  56.     ptree root;
  57.     int info;
  58.     int rez;
  59.     printf("введите элементы дерева(для завершения образования  ветки введите 0)\n");
  60.     root=Form();
  61.     printf("введите число \n");
  62.     scanf("%i",&info);
  63.     rez=schet( root, info);
  64.     if (rez==0)
  65.         printf("такого числа нет\n");
  66.     else
  67.         printf("до числа %i максимальная длина  %i \n",info,rez);
  68.    
  69.     system("pause");
  70. }

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

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

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


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

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

15   голосов , оценка 4.133 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы