Сортировка двоичным деревом через список - Pascal ABC

  1. Доброе время суток. Надеюсь на вашу помощь , ибо уже 2ой час сижу и пытаюсь с помощью интернета и магических заклинаний сделать программу . Суть в построении двоичного дерева через список. То есть , делаем список в котором 4 пункта ( Сам введенный элемент , ссылка на родителя , ссылка на левого сына , ссылка на правого сына ) . Как оно строится ? 1ый элемент становится корнем дерева и каждый последующий элемент сравнивается с корнем и ставится слева ( если меньше корня) или справа (если больше корня) . Вообщем суть в том чтобы взять определенную введенную последовательность , выстроить двоичным деревом ( в данном случае списком ) и выдать отсортированную последовательность ( по принципу левый сын - родитель - правый сын ) . Сижу ломаю голову , интернет не помогает . Вот что у меня получилось пока накрутить :


textual

Код к задаче: «Сортировка двоичным деревом через список - Pascal ABC»

type
    derevo=^tderevo;
    tderevo=record
      roditel:derevo;
      info:integer;
      lsin:derevo;
      rsin:derevo;
    end;
var
  P  : Derevo;
  i  : Integer;
 
Procedure AddElem(inf:integer); {[I] Построение самого дерева[/I]}
Var F,R : Derevo;
  begin
    New(R);
    R^.info:=inf;
    R^.roditel:=nil;
    R^.lsin:=nil;
    R^.rsin:=nil;
    If P=nil then P:=R else
    Begin
      F:=P;
      While ((F^.lsin<>nil) and (inf<=F^.info)) or ((F^.rsin<>nil) and (inf>F^.info)) do
        If inf<=F^.info then F:=F^.lsin else F:=F^.rsin;
      If inf<=F^.info then F^.lsin:=R else F^.rsin:=R;
      R^.roditel:=F;
    end;
  end;
  
procedure Sort(F : Derevo); { [I]Вывод[/I]}
Var R : Derevo;
begin
  If F<>nil then
  Begin
    // Write('(',f^.info,')');  {----------for debuging--------------------}  
    If F^.lsin<>nil then Sort(F^.lsin);
    Write(F^.info,' ');
    If F^.rsin<>nil then Sort(F^.rsin);
    Dispose(F);
  end;
end;
 
Begin
  P:=nil;
 
//  i:=1;
//  While i<>0 do  { вводим элементы, конец последовательности 0 }
//  Begin
//    Readln(i);
//    If i<>0 then AddElem(i);
//  end;
  AddElem(4);
  AddElem(2);
  AddElem(6);
  AddElem(1);
  AddElem(3);
  AddElem(5);
  AddElem(7);
  
  Sort(P);
  Writeln;
end.

СДЕЛАЙТЕ РЕПОСТ

10   голосов, оценка 4.100 из 5



Похожие ответы
  1. Объясните пожалуйста )) Задача: Заполнить массив из 10 чисел, переставить элементы от большего к меньшему. Родилась такая программа: const n=10; var m: array [1..n] of integer; b:integer; c, i:byte; begin for i:=1 to n do begin m[i]:=random(100)-50; write(m[i]:4)//вывод элементов массива на экран end; for i:=2 to n-1 do for c:=1 to n-1 do if m[c]

  1. Помогите, пожалуйста, написать, сам новичок ничего не выходит пока, а программа очень нужна программа, которая сортирует массив, используя метод "пузырька" с флажком. Флажок (логическая переменная) показывает, была ли хотя бы одна перестановка элементов на очередном проходе по массиву. Если перестановок не было, работа программы заканчивается. Входные данные Первая строка содержит размер массива N . Во второй строке через пробел задаются N чисел – элементы массива. Гарантируется, что 0 < N ≤ 10000 . Выходные данные Программа должна выводить все элементы массива в одной строке через пробелы после каждого прохода, если во время этого прохода была перестановка элементов. Если перестановок не было, программа должна вывести исходный массив.

  1. Занесите информацию о десяти европейских странах в массивы n (название страны), k (численность населения), s (площадь страны). Выведите названия стран в порядке возрастания плотности их населения.  

  1. Переделать так, чтобы числа от 10 до 6555 сортировались по убыванию и записывались в начало массива.

  1. Надо изменить так, чтобы числа от 15 до 50 сортировались по убыванию и записывались в начало массива.

  1. есть массив из 40 рандомных значений. с 5 по 40 парные элементы нужно отсортировать по возрастанию. пример не совсем правильно работающего кода:

  1. Помогите пожалуйста, необходимо отсортировать в матрице строки по возрастанию элементов в первом столбце методом быстрой сортировки

  1. заполнить массив случайными числами и ввести число и отсортировать его. ввести число x используя двоичный поиск. определите есть ли в массиве число равное X ,если такого числа нет вывести число ближайшее к x пример массив: 1 4 7 3 9 2 4 5 2 после отсортировки: 1 2 2 3 4 4 5 12 19 введите число X: 12 число 12 найдено пример массив: 1 4 7 3 9 2 4 5 2 после отсортировки: 1 2 2 3 4 4 5 12 19 введите число X: 11 число 11 не найдено. Ближайшее число 12

  1. Помогите с заданием 1 Входной файл f1 содержит данные сосотоящие из целых и строковых чисел 2 Эти данные записаны в столбец 3 Строчные данные содержат любые символы, без пробелов 4 Выходной файл f2 должен быть результат отсортированным по возрастанию 5 Методом Сортировки вставки 6 Входной файл f1 содержит символов не более 50 Пример f1.txt 58 5 u 1 9 f2.txt 1 5 9 58 u

  1. задано слово. за основу алфавита взять буквы из этого слова. пользователь вводит слова и надо их отсортировать по заданному новому алфавиту. например задано слово "солнце" алфавит состоит из букв: 1. С 2. О 3. Л 4. Н 5. Ц 6. Е пользователь вводит слова сон, лес, слон, нос программа должна выдать сон, слон, лес, нос