Описать класс реализующий бинарное дерево c добавлением, удалением и поиском - C#
Формулировка задачи:
Описать класс, реализующий бинарное дерево, обладающее возможностью добавления новых элементов, удаления существующих, поиска элемента по ключу, а также последовательного доступа ко всем элементам.
Написать программу, использующую этот класс для представления англо-русского словаря.
Решение задачи: «Описать класс реализующий бинарное дерево c добавлением, удалением и поиском»
textual
Листинг программы
- #include <iostream>
- using namespace std;
- struct node
- {
- int Key;
- int Count;
- node *Left;
- node *Right;
- };
- class TREE
- {
- private:
- node *Tree; //Указатель на корень дерева.
- void Search (int,node**);
- public:
- TREE()
- {
- Tree=NULL;
- }
- node** GetTree ()
- {
- return &Tree;
- } //Получение вершины дерева.
- void BuildTree ();
- void CleanTree (node **);
- void ObhodEnd (node **);
- void ObhodLeft (node **);
- void ObhodBack (node **);
- void Vyvod (node**,int);
- int Height (node**);
- };
- int main ()
- {
- TREE A;
- A.BuildTree ();
- cout<<"\nVyvod Dereva:\n";
- A.Vyvod (A.GetTree(),0);
- cout<<"\nVysota dereva:"<<A.Height(A.GetTree())<<endl;
- cout<<"\nLevostoronnyi obhod dereva: ";
- A.ObhodLeft (A.GetTree());
- cout<<"\nKonsevoy obhod dereva: "; A.ObhodEnd (A.GetTree());
- cout<<"\nObratniy obhod dereva: "; A.ObhodBack (A.GetTree());
- A.CleanTree (A.GetTree());
- system("pause");
- return 0;
- }
- void TREE::BuildTree ()
- {
- int el;
- cout<<"Vvedite slovo ...\n";
- cin>>el;
- while (el!=0)
- {
- Search (el,&Tree); cin>>el;
- }
- }
- void TREE::Search (int x,node **p)
- {
- if (*p==NULL)
- {
- *p = new(node);
- (**p).Key = x; (**p).Count = 1;
- (**p).Left = NULL; (**p).Right = NULL;
- }
- else
- if (x<(**p).Key) Search (x,&((**p).Left));
- else
- if (x>(**p).Key) Search (x,&((**p).Right));
- else (**p).Count = (**p).Count + 1;
- }
- void TREE::ObhodLeft (node **w)
- {
- if (*w!=NULL)
- {
- cout<<(**w).Key<<" ";
- ObhodLeft (&((**w).Left));
- ObhodLeft (&((**w).Right));
- }
- }
- void TREE::ObhodEnd (node **w)
- //Концевой обход дерева.
- //*w - указатель на корень дерева.
- {
- if (*w!=NULL)
- {
- ObhodEnd (&((**w).Left));
- ObhodEnd (&((**w).Right));
- cout<<(**w).Key<<" ";
- }
- }
- void TREE::ObhodBack (node **w)
- //Обратный обход дерева.
- //*w - указатель на корень дерева.
- {
- if (*w!=NULL)
- {
- ObhodBack (&((**w).Left));
- cout<<(**w).Key<<" ";
- ObhodBack (&((**w).Right));
- }
- }
- void TREE::CleanTree (node **w)
- //Очистка дерева.
- //*w - указатель на корень дерева.
- {
- if (*w!=NULL)
- {
- CleanTree (&((**w).Left));
- CleanTree (&((**w).Right));
- delete *w;
- }
- }
- void TREE::Vyvod (node **w,int l)
- //Изображение дерева *w на экране дисплея
- // (рекурсивный алгоритм).
- //*w - указатель на корень дерева.
- {
- int i;
- if (*w!=NULL)
- {
- Vyvod (&((**w).Right),l+1);
- for (i=1; i<=l; i++) cout<<" ";
- cout<<(**w).Key<<endl;
- Vyvod (&((**w).Left),l+1);
- }
- }
- int TREE::Height (node **w)
- //Определение высоты бинарного дерева.
- //*w - указатель на корень дерева.
- {
- int h1,h2;
- if (*w==NULL) return (-1);
- else
- {
- h1 = Height (&((**w).Left));
- h2 = Height (&((**w).Right));
- if (h1>h2) return (1 + h1);
- else return (1 + h2);
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д