Índice > Árvore > Árvore Binária > Tipos de Percurso

Instituto de Ciências Matemáticas de São Carlos 
Departamento de Computação e Estatística 
SCE182 - Algoritmos e Estruturas de Dados 1 
Profs. Resp.: Graça Pimentel e Maria Cristina

Tipos de Percurso

Percorrer uma árvore visitando cada nó uma única vez gera uma sequência linear de nós, e então passa a ter sentido falar em sucessor e predecessor de um nó segundo um determinado percurso. Há três maneiras recursivas de se percorrer árvores binárias.

Travessia em Pré-Ordem

  1. se árvore vazia; fim
  2. visitar o nó raiz
  3. percorrer em pré-ordem a subárvore esquerda
  4. percorrer em pré-ordem a subárvore direita

Pré-ordem:

Travessia em In-Ordem

  1. se árvore vazia, fim
  2. percorrer em in-ordem a subárvore esquerda
  3. visitar o nó raiz
  4. percorrer em in-ordem a subárvore direita
In-ordem:

Travessia em Pós-Ordem

  1. se árvore vazia, fim
  2. percorrer em Pós-Ordem a subárvore esquerda
  3. percorrer em Pós-Ordem a subárvore direita
  4. visitar o nó raiz
Pós-Ordem

Algoritmos de Percurso - versão recursiva

  
  Procedure PreOrdem(N:tree);
  Begin
    If N <> nil Then
      Begin
        Processa(N); {p. ex. imprime}
        PreOrdem(N^.esq);
        PreOrdem(N^.dir);
      End;
  End;

  
  Procedure InOrdem(N:tree);
  Begin
    If N <> nil Then
      Begin
        InOrdem(N^.esq);
        Processa(N); {p. ex: imprime}
        InOrdem(N^.dir);
      End;
  End;

  
  Procedure PosOrdem(N:tree)
  Begin
    If N <> nil Then
      Begin
        PosOrdem(N^.esq);
        PosOrdem(N^.dir);
        Processa(N); {p.ex.: imprime}
      End;
  End;

Operações Facilitadas pelos Algoritmos de Percurso:

Pesquisa se um elemento existe
  Function Esta_Presente(t: tree; item: Telem): boolean;
  Begin
    Esta_Presente:= busca(t, item) <> nil;
  End;
  Function Busca(t:tree; item: Telem): Tree;
  Var
    achou: boolean;
    ptr: tree;

  Procedure Pós-Ordem(t:tree; var prt:tree; var achou:boolean);
  Begin
    If (t<>nil) and (not achou) then
      Begin
        Pós-Ordem(t^.esq,ptr,achou);
        if not achou then Pós-Ordem(t^.dir,ptr,achou);
        If not achou then
            If Igual(item, t^.info) Then
            Begin
              achou:=true;
              ptr:=t;
            End;
      End;
  End;     {Pós-Ordem}

  Begin    {busca}
    achou:=false;
    ptr:=nil;
    Pós-Ordem(t,ptr,achou);
    busca:=ptr;
  End;     {busca}
Outra versão para busca
  Function Busca1(t: tree; item: Telem): tree;
  Var achou:boolean;

    Function Local(t: tree; item: Telem; var achou:boolean):tree;
    Begin
      If not vazia (t) then
        If t^.info=item then local:=t;
        Else
          Begin
            local:=local(t^.esq, item, achou);
            If not achou Then 
              local=local(t^.dir, item, achou);
          End;
    End;        {local}

  Begin         {busca1}
    busca1:= nil;
    busca1:=local(t, item, achou);
  End;
Tornar uma árvore vazia
  Procedure Tornar_Vazia(var t: tree);

  Begin
    If not Vazia(t) Then
      Begin
        Tornar_Vazia(t^.esq);
        Tornar_Vazia(t^.dir);
        Dispose(t);
       End;
    t:=nil;
  End;
Treinar o rastreamento dos Algoritmos de Travessia em Árvore Binária.


Exercícios

Árvore Balanceada

Índice