Среда, 18.06.2025, 21:13 Приветствую Вас Гость

Решение задач любой сложности

Главная | Регистрация | Вход | RSS

Все статьи на сайте

Главная » Статьи » Решение заданий Delphi

Задача: Создать бинарное дерево.

Совершенно удивительно порой в заданиях для студентов находить новые для себя вещи. К примеру, решение заданий на построение бинарного дерева, честно говоря, меня озадачило.

Бинарное дерево, в целом, - это структура зависимости данных, которую можно представить в виде череды модулей IF..ElSE. Хотя соглашусь с вами, данного описания явно не достаточно для четкого понимания термина. Для наглядности и простоты восприятия подобную структуру проще нарисовать, чем описать, поэтому я вам тут нарисовала схемку:
Ромбы и исходящие из них вправо и влево линии означают условия, которые приводят на уровень ниже к другим условиям. Слово "Да" по сути означает "true" в модуле IF..ElSE или единицу в бинарном представлении.
Таким образом, когда вам попадется задание типа: построить бинарное дерево из массива с 9 элементами, знайте, что от вас хотят добиться изображенной на рисунке структуры.
В приведенном же мной примере задание выглядит довольно свободно. Фактически нужно самостоятельно выбрать условия для нашего бинарного дерева и затем написать программу на Delphi. Спешу заметить, что такие задачи мне не нравятся, т.к. преподаватель чаще всего имеет свое видение вопроса и, скорее всего, даже при верном ходе решения вам придется доказывать, почему вы выбрали именно этот путь. Но задание есть, поэтому приступим к его решению.
Бинарное дерево массива, состоящего из 9 элементов, я решила строить исходя из их индексов. Мысленно разделив массив на 2 части, поставила на вершину структуры признак по индексу среднего элемента (i<4?). (Средний элемент у нас будет под индексом 4). Если индекс элемента меньше 4, то идем по правой ветке - true - 1, если больше, то по левой - false - 0.
Следующий уровень разделения по признакам (i>2?) и (n<6?), ну и на третьем уровне оставшиеся числа проверим на (i=1?) и (i=8?). Приведенные мной условия, конечно же рассматриваются в соответствии с разделением по признаку первого уровня.
Таким образом, мы условно зададим схему распределения элементов массива по признакам.
Исходники Delphi:

assignFile(f,'C:\1.txt');

ReWrite(f);
Writeln(f,'i-порядковый номер элемента в массиве [0..8]');
Writeln(f,'(i<4)?');
for i := 0 to Length(arr) - 1 do
  arr[i]:=i+1;
s11:=' _1_';
s10:=' _0_';
s21R:=' __1R_';
s20R:=' __0R_';
s31R:=' ___1R_';
s30R:=' ___0R_';
s21L:=' __1L_';
s20L:=' __0L_';
s31L:=' ___1L_';
s30L:=' ___0L_';
for i := 0 to Length(arr) - 1 do
    if i<4 then
       begin
          s11:=s11+IntToStr(arr[i]);
          if i>2 then s21R:=s21R+IntToStr(arr[i])
          else begin
                s20R:=s20R+IntToStr(arr[i]);
                if i=1 then s31R:=s31R+IntToStr(arr[i])
                else s30R:=s30R+IntToStr(arr[i])
              end
       end
    else begin
             s10:=s10+IntToStr(arr[i]);
             if i<6 then s21L:=s21L+IntToStr(arr[i])
             else begin
                       s20L:=s20L+IntToStr(arr[i]);
                       if i=8 then s31L:=s31L+IntToStr(arr[i])
                       else s30L:=s30L+IntToStr(arr[i])
                   end;
           end;
writeln(f,s11);
writeln(f,' _(i>2)?_');
writeln(f,s21R);
writeln(f,s20R);
writeln(f,' __(i=1)?_');
writeln(f,s30R);
writeln(f,s31R);
writeln(f,'');
writeln(f,s10);
writeln(f,' _(i<6)?_');
writeln(f,s21L);
writeln(f,s20L);
writeln(f,' __(i=8)?_');
writeln(f,s31L);
writeln(f,s30L); closefile(f)

Код немного громоздкий, но если вы присмотритесь повнимательнее, то основную часть кода составляет не столько формирование бинарного дерева из массива (массив я заполнила для наглядности числами от 1 до 9), сколько формирование файла с видом бинарного дерева.
Отмечу сразу, что поскольку задание довольно вольное - вы в праве формировать такой файл так, как вашей душе угодно. Для наглядности я постаралась отобразить разветвления дерева по средствам явного упоминания условий и с помощью бинарных признаков 0 и 1 - ветви бинарного дерева. Таким образом, содержимое файла выглядит так:

i-порядковый номер элемента в массиве [0..8]
(i<4)?
  _1_1234
  _(i>2)?_
  __1R_4
  __0R_123
  __(i=1)?_
  ___0R_13
  ___1R_2

_0_56789
_(i<6)?_
__1L_56
__0L_789
__(i=8)?_
___1L_9
___0L_78

Буковки L и R - условно обозначают левую и правую ветвь бинарного дерева относительно признака первого уровня.
Ну что? Разобрались? Если какое-то задание все еще вызывает у вас затруднение, обратитесь за помощью ко мне (прошу в контакты).
Категория: Решение заданий Delphi | Добавил: Мятка (29.10.2010) | Автор: Alexandra W
Просмотров: 5609 | Комментарии: 1 | Теги: программы на заказ, примеры Delphi, написать программу, Delphi исходники, алгоритм, решение на заказ, решение заданий, программирование на delphi | Рейтинг: 4.5/2
Всего комментариев: 1
1 appeakyhailia  
0
Просто хорошая страничка

Имя *:
Email *:
Код *: