Имеется структура для двоичного дерево поиска
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 и все они добавятся только в левую сторону, как сбалансированно заполнять дерево?