Академический Документы
Профессиональный Документы
Культура Документы
Рекурсивные иерархические
структуры данных: бинарные деревья
1 Цель работы
Получить практические навыки использования структур данных типа
«Упорядоченное бинарное дерево» в разработке приложений.
3 Содержание отчета
− наименование и цель работы;
− задание на лабораторную работу согласно варианту;
− схема алгоритма, текст программы на алгоритмическом языке;
− результаты работы программы.
struct TNode;
//корень дерева
PNode Tree = NULL;
//печать дерева
void PrintTree(PNode Tr, int H)
{
if (Tr)
{
PrintTree(Tr->Right, H+1);
for (int i = 1;i <= H;i++)
cout<<' ';
cout<<Tr->Data<<endl;
PrintTree(Tr->Left, H+1);
}
}
//прямой обход
void PreTrave(PNode Tr)
{
if (Tr)
{
cout<<Tr->Data<<' ';
PreTrave(Tr->Left);
PreTrave(Tr->Right);
}
}
//симметричный обход
void InTrave(PNode Tr)
{
if (Tr)
{
InTrave(Tr->Left);
cout<<Tr->Data<<' ';
InTrave(Tr->Right);
}
}
//обратный обход
void PostTrave(PNode Tr)
{
if (Tr)
{
PostTrave(Tr->Left);
PostTrave(Tr->Right);
cout<<Tr->Data<<' ';
}
}
//поиск элемента в дереве
bool Find(PNode Tr, int key)
{
PNode p = Tr;
while (p)
{
if (key == p->Data)
return true;
if (key < p->Data)
p = p->Left;
else
p = p->Right;
}
return false;
}
//поиск со вставкой
void FindIns(PNode Tr, int key)
{
if (Find(Tr, key))
cout<<"There is such node!\n";
else
BuildTree(Tr, key);
}
//поиск с удалением
void Delete(PNode& Tr, int Data)
{
PNode p;
if (!Tr)
cout<<"There is no such element!\n";
else
if (Data < Tr->Data)
Delete(Tr->Left, Data);
else
if (Data > Tr->Data)
Delete(Tr->Right, Data);
else
{
p = Tr;
if (!p->Left)
Tr = p->Right;
else
if (!p->Right)
Tr = p->Left;
else Del(p->Right, p);
}
}
void main()
{
srand((unsigned)time(NULL));
int x, n = 10;
for (int i = 1; i <= n; i++)
{
x = rand() % 100;
cout<<x<<' ';
BuildTree(Tree, x);
}
cout<<"\nBuilt tree:\n";
PrintTree(Tree,0);
cout<<"Up-down\n";
PreTrave(Tree);
cout<<"\nLeft-Right\n";
InTrave(Tree);
cout<<"\nDown-Up\n";
PostTrave(Tree);