Двоичные деревья поиска (Делфи)
Автор: kattygra • Ноябрь 28, 2019 • Лабораторная работа • 1,897 Слов (8 Страниц) • 805 Просмотры
Разработать программу, реализующую следующий набор операций с двоичными деревьями поиска:
1. поиск вершины с заданным значением ключа с выводом счетчика появлений данного ключа.
2. добавление новой вершины в соответствии со значением ее ключа или увеличение счетчика числа появлений.
3. построчный вывод дерева в наглядном виде с помощью обратно-симметричного обхода.
Все действия оформляются как подпрограммы.
Программная реализация выполняется в среде Windows с помощью пакета Delphi (или С++) с использованием стандартных компонентов отображения данных или в виде консольного приложения с простейшим диалогом.
Окно программы:
[pic 1]
[pic 2]
[pic 3]
Модуль BinaryTree – работа с бинарным деревом поиска
unit BinaryTree;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TItem = ShortString; // тип информационного поля
TTree =^ TNode;
TNode = record
Data: TItem;
key: integer;
Left: TTree;
Right: TTree;
end;
procedure makeTree(var Work: TTree; x: TItem; y:integer); // создание нового узла
procedure InsertTree(Work: TTree; x: TItem; y:integer); // добавление нового узла в дерево
procedure DeleteTree(var Work: TTree; y:integer);
procedure Preorder(Work: TTree; var str: String); // обход дерева
procedure Inorder(Work: TTree; var str: String); // обход дерева
procedure Order(Work: TTree; var str: String); // обход дерева
procedure ReverseInorder(Work: TTree; var str: String);// обратно-симметричный обход дерева
function MinTree(Work: TTree): TTree; // нахождение минимального узла в дереве
function MaxTree(Work: TTree): TTree; // нахождение максимального узла в дереве
procedure SearchInTree(Work: TTree; y:integer; var f: boolean; var Work1: TTree);
procedure DepthTree(Work: TTree; sum: Cardinal; var max: Cardinal);
implementation
//функция возвращает истину, если дерево пустое, и ложь в противном случае
function EmptyTree(Work: TTree): boolean;
begin
Result:=Work=nil;
end;
//процедура создания нового узла
procedure makeTree(var Work: TTree; x: TItem; y:integer);
begin
New(Work);
Work^.Data:=x;
Work^.key:=y;
Work^.Left:=nil;
Work^.Right:=nil;
end;
//процедура добавления нового узла
procedure InsertTree(Work: TTree; x: TItem; y:integer);
var Work1: TTree;
begin
// проверка, не пустое ли дерево
if EmptyTree(Work) then
begin
ShowMessage('Дерево пустое!!!');
exit;
end;
while Work<>nil do // находим место вставки нового узла
begin
Work1:=Work; // запоминаем предыдущий узел
if y
Work:=Work^.Left
else
Work:=Work^.Right;
end;
Work:=Work1;
makeTree(Work1,x,y); // создаем новый узел
if y
...