Автор: Пользователь скрыл имя, 22 Июня 2013 в 14:01, курсовая работа
Написать программу, реализующую структуру данных АВЛ-деревья. Программа должна выполнять следующие функции:
Создание дерева.
Добавление узла в дерево.
Удаление узла из дерева.
Поиск узла по значению.
Поиск минимального по значению узла.
Поиск максимального по значению узла.
Восстановление баланса дерева.
Поиск упорядоченного бинарного дерева поиска максимальной высоты.
Вывод дерева на экран в виде рисунка.
25. if k > key [ t ]
26. then right [ t ] ← AVL_
27. if hh=TRUE
28. then if ba
29.
30.
31.
32.
33.
34.
35.
36
37.
38.
39. deleted ← del
40. return t
41. найден удаляемый узел t
42. deleted ← TRUE
43. if left [ t ] = nil and r
44. then Delete_Node ( t
45. h ← TRUE
46. return nil
47. if left [ t ]= nil
48. then x ← right [ t ]
49. Delete_Node ( t )
50. h ← TRUE
51. return x
52. if right [ t ] = nil
53. then x ← left [ t ]
54. Delete_Node ( t )
55. h ← TRUE
56. return x
57. right [ t ] ← Del (right [ t ]
58. if hh = TRUE
59. then if bal [ t ] = 1
60. then bal[t
61. h
62. else if bal [ t ] = 0
63.
64.
65.
66.
67. else h ← TRUE
68
69.
70.
71. return t
Del( t, t0, h )
1. h ← FALSE
2. if left [ t ] ≠ nil
3. then left [ t ] ← Del
4. if hh = TRUE
5. then if ba
6.
7.
8. else
9.
10.
11.
12.
13.
11.
12.
13. return t
14. else key[ t0 ] ← key [ t ]
15. data[ t0 ] ← data [ t ]
16. x ← right [ t ]
17. Delete_Node ( t )
18. h ← TRUE
19. return x
Рис. 3.1. Создание простого бинарного дерева.
Рис. 3.2. Создание АВЛ-дерева.
Рис. 3.3. Добавление узла в созданное АВЛ-дерево.
Рис. 3.4. Удаление узла из АВЛ-дерева.
Рис. 3.5. Поиск элемента в дереве.
Рис. 3.6. Поиск упорядоченного поддерева максимальной глубины.
Unit 1
//----------------------------
#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.cpp"
//----------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
cTree* curTree;
//----------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//----------------------------
void __fastcall TForm1::elCountChange(TObject *Sender) //изменение размера массива
{
int count = 0;
if (!TryStrToInt(elCount->Text, count)) //проверка правильности ввода
{
if (!elCount->Text.IsEmpty())
ShowMessage("Ошибка ввода!");
}
else
massGrid->ColCount = count;
}
void ClearPaintField() //очистка полотна
{
Form1->Canvas->Pen->Color = clBlack;
Form1->Canvas->Brush->Color = clWhite;
TRect* rect = new TRect(390, 5, 930, 470);
Form1->Canvas->Rectangle(*
Form1->Canvas->FillRect(*rect)
}
//----------------------------
void __fastcall TForm1::crtBtnClick(TObject *Sender) //создание массива
{
int i; //индекс
int count = massGrid->ColCount; //количество элементов в массиве
float* mass = new float[count]; //указатель на массив
bool isReady = true;
for (i = 0; i < count ; i++)
{
float tmp = 0;
if (!TryStrToFloat(massGrid->
{
if (massGrid->Cells[i][0] != "")
{
}
else
{
}
}
mass[i] = tmp;
}
if (isReady) //если все данные введены правильно
{
if (curTree != NULL) //проверка на наличие старого дерева
{
curTree->Destroy();
free(curTree);
}
curTree = new cTree(mass[0]); //сосздаем новое дерево
for (i = 1; i < count; i++)
curTree->AddNode(mass[i], modeChkBox->Checked);
ClearPaintField(); //очищаем полотно
curTree->DrawTree(Form1); //рисуем дерево
}
}
bool GetParams(float &key) //получение параметров поиска
{
if (!TryStrToFloat(Form1->
{
ShowMessage("Неправильно задан искомый элемент.");
return false;
}
if (curTree == NULL) //проверка на наличие дерева
{
ShowMessage("Дерево не задано.");
return false;
}
return true;
}
void __fastcall TForm1::clrBtnClick(TObject *Sender) //очистка полей ввода массива
{
for (int i = 0; i < massGrid->ColCount; i++)
massGrid->Cells[i][0] = "";
}
//----------------------------
void __fastcall TForm1::SvTFlBtnClick(TObject *Sender) //открытие диалога сохранения файла
{
SaveDialog1->Execute();
}
//----------------------------
void __fastcall TForm1::SaveDialog1CanClose(
bool &CanClose) //сохранение файла
{
outputMemo->Lines->SaveToFile(
}
//----------------------------
void __fastcall TForm1::SrchBtnClick(TObject *Sender) //поиск узла по заданому ключу
{
float key;
if (GetParams(key)) //получение параметров
{
cNode* node = curTree->Find(key); //поиск
if (node != NULL) //проверка на результат
outputMemo->Lines->Add(node->
else
outputMemo->Lines->Add("
}
}
//----------------------------
void __fastcall TForm1::minSrchBtnClick(
{
if (curTree == NULL) //проверка на наличие дерева
ShowMessage("Дерево не задано.");
else
outputMemo->Lines->Add(
}
//----------------------------
void __fastcall TForm1::maxSrchBtnClick(
{
if (curTree == NULL) //проверка на наличие дерева
ShowMessage("Дерево не задано.");
else
outputMemo->Lines->Add(
}
//----------------------------
void __fastcall TForm1::addBtnClick(TObject *Sender) //добавление узла
{
if (curTree == NULL) //проверка на наличие дерева
{
ShowMessage("Дерево не задано.");
return;
}
float key;
if (!TryStrToFloat(Form1->
{
ShowMessage("Неправильно задан добавляемый элемент.");
return;
}
curTree->AddNode(key, modeChkBox->Checked); //добавляем узел
ClearPaintField(); //очищаем полотно
curTree->DrawTree(Form1); //рисуем дерево
}
//----------------------------
void __fastcall TForm1::delBtnClick(TObject *Sender) //удаление узла
{
if (curTree == NULL) //проверка на наличие дерева
{
ShowMessage("Дерево не задано.");
return;
}
float key;
if (!TryStrToFloat(Form1->
{
ShowMessage("Неправильно задан добавляемый элемент.");
return;
}
if (curTree->DeleteNode(key, modeChkBox->Checked)) //удаляем узел
Информация о работе Реализовать программу для работы с типом данных ”Дерево”