Описать класс реализующий бинарное дерево c добавлением, удалением и поиском - C#

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

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

Описать класс, реализующий бинарное дерево, обладающее возможностью добавления новых элементов, удаления существующих, поиска элемента по ключу, а также последовательного доступа ко всем элементам. Написать программу, использующую этот класс для представления англо-русского словаря.

Решение задачи: «Описать класс реализующий бинарное дерево c добавлением, удалением и поиском»

textual
Листинг программы
  1. #include <iostream>
  2. using namespace std;
  3. struct node
  4. {
  5.     int Key;
  6.     int Count;
  7.     node *Left;
  8.     node *Right;
  9. };
  10.  
  11. class TREE
  12. {
  13. private:
  14.     node *Tree; //Указатель на корень дерева.
  15.     void Search (int,node**);
  16. public:
  17.     TREE()
  18.     {
  19.         Tree=NULL;
  20.     }
  21.     node** GetTree ()
  22.     {
  23.         return &Tree;
  24.     } //Получение вершины дерева.
  25.     void BuildTree ();
  26.     void CleanTree (node **);
  27.     void ObhodEnd (node **);
  28.     void ObhodLeft (node **);
  29.     void ObhodBack (node **);
  30.     void Vyvod (node**,int);
  31.     int Height (node**);
  32. };
  33. int main ()
  34. {
  35.     TREE A;
  36.     A.BuildTree ();
  37.     cout<<"\nVyvod Dereva:\n";
  38.     A.Vyvod (A.GetTree(),0);
  39.     cout<<"\nVysota dereva:"<<A.Height(A.GetTree())<<endl;
  40.     cout<<"\nLevostoronnyi obhod dereva: ";
  41.     A.ObhodLeft (A.GetTree());
  42.     cout<<"\nKonsevoy obhod dereva: "; A.ObhodEnd (A.GetTree());
  43.     cout<<"\nObratniy obhod dereva: "; A.ObhodBack (A.GetTree());
  44.     A.CleanTree (A.GetTree());
  45.     system("pause");
  46.     return 0;
  47. }
  48. void TREE::BuildTree ()
  49. {
  50.     int el;
  51.     cout<<"Vvedite slovo ...\n";
  52.     cin>>el;
  53.     while (el!=0)
  54.     {
  55.         Search (el,&Tree); cin>>el;
  56.     }
  57. }
  58. void TREE::Search (int x,node **p)
  59. {
  60.     if (*p==NULL)
  61.     {
  62.         *p = new(node);
  63.         (**p).Key = x; (**p).Count = 1;
  64.         (**p).Left = NULL; (**p).Right = NULL;
  65.     }
  66.     else
  67.         if (x<(**p).Key) Search (x,&((**p).Left));
  68.         else
  69.             if (x>(**p).Key) Search (x,&((**p).Right));
  70.             else (**p).Count = (**p).Count + 1;
  71. }
  72. void TREE::ObhodLeft (node **w)
  73. {
  74.     if (*w!=NULL)
  75.     {
  76.         cout<<(**w).Key<<" ";
  77.         ObhodLeft (&((**w).Left));
  78.         ObhodLeft (&((**w).Right));
  79.     }
  80. }
  81. void TREE::ObhodEnd (node **w)
  82.     //Концевой обход дерева.
  83.     //*w - указатель на корень дерева.
  84. {
  85.     if (*w!=NULL)
  86.     {
  87.         ObhodEnd (&((**w).Left));
  88.         ObhodEnd (&((**w).Right));
  89.         cout<<(**w).Key<<" ";
  90.     }
  91. }
  92. void TREE::ObhodBack (node **w)
  93.     //Обратный обход дерева.
  94.     //*w - указатель на корень дерева.
  95. {
  96.     if (*w!=NULL)
  97.     {
  98.         ObhodBack (&((**w).Left));
  99.         cout<<(**w).Key<<" ";
  100.         ObhodBack (&((**w).Right));
  101.     }
  102. }
  103. void TREE::CleanTree (node **w)
  104.     //Очистка дерева.
  105.     //*w - указатель на корень дерева.
  106. {
  107.     if (*w!=NULL)
  108.     {
  109.         CleanTree (&((**w).Left));
  110.         CleanTree (&((**w).Right));
  111.         delete *w;
  112.     }
  113. }
  114. void TREE::Vyvod (node **w,int l)
  115.     //Изображение дерева *w на экране дисплея
  116.     // (рекурсивный алгоритм).
  117.     //*w - указатель на корень дерева.
  118. {
  119.     int i;
  120.     if (*w!=NULL)
  121.     {
  122.         Vyvod (&((**w).Right),l+1);
  123.         for (i=1; i<=l; i++) cout<<" ";
  124.         cout<<(**w).Key<<endl;
  125.         Vyvod (&((**w).Left),l+1);
  126.     }
  127. }
  128. int TREE::Height (node **w)
  129.     //Определение высоты бинарного дерева.
  130.     //*w - указатель на корень дерева.
  131. {
  132.     int h1,h2;
  133.     if (*w==NULL) return (-1);
  134.     else
  135.     {
  136.         h1 = Height (&((**w).Left));
  137.         h2 = Height (&((**w).Right));
  138.         if (h1>h2) return (1 + h1);
  139.         else return (1 + h2);
  140.     }
  141. }

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


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

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

11   голосов , оценка 4.273 из 5

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

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

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