Помощь - Поиск - Пользователи - Календарь
Полная версия: Поиск второго минимального элемента
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Доча
Нужен поиск второго минимального элемента в бинарном дереве.
У меня есть только поиск первого мин. элемента, но тут проще всё и алгоритм другой - не знаю, надо ли выкладывать, но всё же:

Код

{$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.
volvo
Доча

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


Код

...
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.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.