Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Двоичные деревья поиска (Делфи)

Автор:   •  Ноябрь 28, 2019  •  Лабораторная работа  •  1,897 Слов (8 Страниц)  •  731 Просмотры

Страница 1 из 8

Разработать программу, реализующую следующий набор операций с двоичными деревьями поиска:

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 ythen

        Work:=Work^.Left

      else

        Work:=Work^.Right;

    end;

  Work:=Work1;

  makeTree(Work1,x,y);  // создаем новый узел

  if ythen  // проверка в какое поддерево нужно вставить новый узел

...

Скачать:   txt (13 Kb)   pdf (233.6 Kb)   docx (44.6 Kb)  
Продолжить читать еще 7 страниц(ы) »
Доступно только на Essays.club