Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.05.13;
Скачать: [xml.tar.bz2];

Вниз

Процедура балансировки дерева   Найти похожие ветки 

 
inoc ©   (2007-04-19 10:35) [0]

Классическая задача создания идеально сбалансированного дерева.
Берем Вирта, оттуда функция (переведенная в Delphi):

Function prootBLns(L:integer):Ttree;
Var p:Ttree; m,m1:integer;
begin
if (L=0) then P:=Nil
else begin
m:=L div 2;
m1:=l-m-1;
New(p); P^.Inf:=mas[m];
P^.A1:=ProotBLns(m);
P^.A2:=ProotBLns(m1);
end;
Result:=p;
end;

краткое пояснения: mas - массив элементов, отсортированных по возрастанию ключа.

Результат - узлы выбираются по нескольку раз (дублируются), а некоторые просто "пролетают". Может где пропустил чего?

В методе - вот такая функция, вызов prootBLns(1,n)
Function prootBLns(K,L:Word):Ttree;
Var p:Ttree; m:Word;
begin
if K>L then P:=Nil
else begin
m:=K+L div 2;
New(p); P^.Inf:=a[m];
P^.A1:=ProotBLns(K,m);
P^.A2:=ProotBLns(m+1,L);
end;
Result:=p;
end;

Результат - переполнение.


 
MBo ©   (2007-04-19 13:18) [1]

Function prootBLns(StartIdx, EndIdx):Ttree;
Var
 p:Ttree;
 m:Word;
begin
 if StartIdx > EndIdx then
   P := Nil
 else begin
    Middle := (StartIdx + EndIdx)  div 2;
    New(p);
    P^.Inf := a[Middle];
    P^.Left := ProotBLns(StartIdx, Middle - 1);
    P^.Left := ProotBLns(Middle + 1, EndIdx);
 end;
 Result:=p;
end;


 
inoc ©   (2007-04-19 14:30) [2]

Работает, спасибо!



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.05.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.44 MB
Время: 0.04 c
11-1159190982
lse
2006-09-25 17:29
2007.05.13
stroke2windowEx


9-1149625295
DevilDevil
2006-06-07 00:21
2007.05.13
Алгоритм быстрой 3D графики


15-1176554505
=Guest=
2007-04-14 16:41
2007.05.13
глава ЕС


9-1149650179
kinder_help
2006-06-07 07:16
2007.05.13
Помогите пожалуйста сделать рулетку!!!


15-1176642479
Knight
2007-04-15 17:07
2007.05.13
Смотрю видео через Paint&#133





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский