Задать вопрос
@Porto_b

Двоичное дерево поиска?

Имеется структура для двоичного дерево поиска
U = ^BTS;
BTS = record
       inf : integer;  //Ключ\Данные
         L : U;          //Левый потомок
         R : U;         //Правый потомок
      end;

И код заполняющий его случайными числами/ключами(переменная R)
..

procedure CTree(var Tree : U; R : integer;);
begin
           if Tree = Nil
             then
                 begin
                   New(Tree);
                   Tree^.L := Nil;
                   Tree^.R := Nil;
                   Tree^.inf := R;
                 end
             else
                   if R <= Tree^.inf
                           then CTree(Tree^.L,R)
                           else CTree(Tree^.R,R)
              
end;
..
Randomize;
..
for i:=0 to n-1 do
   begin
            r := random(30);
            CTree(a, r);
   end;

Так вот, если например корневой узел будет с ключом 15 то все остальные сгенерированные ключи будут добавляться в вправо или влево в зависимости больше они 15 или меньше, может случиться так что все числа сгенерируются меньше 15 и все они добавятся только в левую сторону, как сбалансированно заполнять дерево?
  • Вопрос задан
  • 75 просмотров
Подписаться 2 Простой 4 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы