IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Поиск второго минимального элемента, в бинарном дереве
сообщение
Сообщение #1


Гость






Нужен поиск второго минимального элемента в бинарном дереве.
У меня есть только поиск первого мин. элемента, но тут проще всё и алгоритм другой - не знаю, надо ли выкладывать, но всё же:

Код

{$A+,B+,D+,E+,F+,G+,I+,L+,N+,O+,P+,Q+,R+,S+,T+,V+,X+}
{$M 16384,0,655360}

program tree;
type pt=^node;
     node=Record
     data:integer;
     left,right:pt;
     end;
var t:pt;
    x,p:integer;
    min:integer;

procedure insert_tree(var t:pt; x:integer);
begin
if t=nil then begin
 new(t);
 with t^ do begin
  data:=x;
  left:=nil;
  right:=nil;
  end
  end
 else if x<t^.data then insert_tree(t^.left,x)
                   else insert_tree(t^.right,x);
end;

procedure search(t:pt;var m:integer);
 var i,j:integer;
 begin
  if t<>nil then
   if t^.left<>nil then search(t^.left,m)
                   else m:=t^.data;
 end;

procedure print(t:pt; h:integer);
 var i:integer;
 begin
  if t<>nil then with t^ do begin
    print(left,h+5);
    for i:=1 to h do write(' ');
    writeln(data:3);
    print(right,h+5);
   end;
 end;

BEGIN
 write('x=');
 readln(x);
 repeat
 insert_tree(t,x);
 write('x=');
 read(x);
 until Eof;
 write('tree: ');
 print(t,1);
 search(t,min);
 writeln('min=',min);
 readln;
 readln;
END.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Доча

Можно вот так:


Код

...
procedure searchsec(t, prev:pt;var m:integer);
var i,j:integer;
begin
 if t<>nil then
  if t^.left<>nil then searchsec(t^.left,t,m)
                  else
                    if t^.right = nil then m:=prev^.data
                    else m := t^.right^.data;
end;
...

BEGIN
  ...
 search_sec(t, t, sec_min);
 writeln('second min = ', sec_min);
  ...
END.
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 23.12.2024 21:23
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name