Advertisement
paulogp

Arvore

Aug 7th, 2011
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 1.80 KB | None | 0 0
  1. {* paulogp *}
  2. {* mac os 7 *}
  3. program Ada27p;
  4.  
  5. uses
  6.     MemTypes, QuickDraw, OSIntf;
  7.  
  8. type
  9.     String20 = string[20];
  10.     Itemponteiro = ^item;
  11.     Item = record
  12.             dado : string20;
  13.             esquerda, direita: Itemponteiro
  14.         end;
  15.  
  16. var
  17.     novodado : string20;
  18.     raiz: Itemponteiro;
  19.     tecla: string;
  20.  
  21.    
  22. procedure processar(no : Itemponteiro);
  23. begin
  24.     write(no^.dado,', ')
  25. end;
  26.  
  27. procedure emordem( no : Itemponteiro);
  28. begin
  29.     if no <> nil then
  30.     begin
  31.         emordem(no^.esquerda);
  32.         processar(no);
  33.         emordem(no^.direita);
  34.     end;
  35. end;
  36.  
  37. procedure preordem( no : Itemponteiro);
  38. begin
  39.     if no <> nil then
  40.     begin
  41.         processar(no);
  42.         preordem(no^.esquerda);
  43.         preordem(no^.direita);
  44.     end;
  45. end;
  46.      
  47. procedure postordem( no : Itemponteiro);
  48. begin
  49.     if no <> nil then
  50.     begin
  51.         postordem(no^.esquerda);
  52.         postordem(no^.direita);
  53.         processar(no);
  54.     end;
  55. end;
  56.  
  57. procedure procurar(var raiz : Itemponteiro);
  58. begin
  59.     if raiz = nil then
  60.     begin
  61.         new(raiz);
  62.         with raiz^ do
  63.         begin
  64.             dado:= novodado;
  65.             esquerda:= nil;
  66.             direita:= nil;
  67.         end;
  68.     end else
  69.     with raiz^ do
  70.     begin
  71.         if novodado < dado then procurar(esquerda) else
  72.             if novodado > dado then procurar(direita) else
  73.                 Writeln ('Erro : duplicacao de dados!')
  74.     end
  75. end;
  76.  
  77. begin
  78.     repeat
  79.         writeln('Exemplo de Arvore');
  80.         writeln('~~~~~~~~~~~~~~~~~');
  81.         raiz := nil;
  82.         repeat
  83.             write('Dado (return para terminar)? ');
  84.             readln(novodado);
  85.             if length(novodado) > 0 then procurar(raiz)
  86.         until length(novodado) = 0;
  87.         writeln;
  88.         writeln('Preordem:');
  89.         preordem (raiz);
  90.         writeln;
  91.         writeln;
  92.         writeln('Em ordem:');
  93.         emordem (raiz);
  94.         writeln;
  95.         writeln;
  96.         writeln('Postordem:');
  97.         postordem (raiz);
  98.         writeln;
  99.         writeln;
  100.         writeln;
  101.         write('Repetir (s/n): ');
  102.         readln(tecla);
  103.         uprstring(tecla, true);
  104.     until tecla = 'N';
  105. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement