Описать класс реализующий бинарное дерево 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); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д