Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
AULA e07aAlgoritmos e Estruturas de Dados I
Árvores Binárias - Percursos (parte I)
Luciano Antonio Digiampietri
Árvores Binárias - Percursos
Há diversas formas de percorrer uma árvore.
- Utilizamos abordagens recursivas para exibir oselementos de uma árvore, contar o número de nósou calcular sua altura.- Hoje discutiremos diferentes abordagens.
Árvores Binárias - Percursos
Há diversas formas de percorrer uma árvore.- Utilizamos abordagens recursivas para exibir oselementos de uma árvore, contar o número de nósou calcular sua altura.
- Hoje discutiremos diferentes abordagens.
Árvores Binárias - Percursos
Há diversas formas de percorrer uma árvore.- Utilizamos abordagens recursivas para exibir oselementos de uma árvore, contar o número de nósou calcular sua altura.- Hoje discutiremos diferentes abordagens.
Árvores Binárias - PercursosOs percursos mais comuns em árvores bináriaspartem da raiz e, recursivamente, percorrem asubárvore à esquerda e em seguida a subárvore àdireita.
Estes percursos podem ser implementados demaneira iterativa (utilizando uma estrutura de dadosauxiliar);É possível também percorre a árvore em nível.
Árvores Binárias - PercursosOs percursos mais comuns em árvores bináriaspartem da raiz e, recursivamente, percorrem asubárvore à esquerda e em seguida a subárvore àdireita.Estes percursos podem ser implementados demaneira iterativa (utilizando uma estrutura de dadosauxiliar);
É possível também percorre a árvore em nível.
Árvores Binárias - PercursosOs percursos mais comuns em árvores bináriaspartem da raiz e, recursivamente, percorrem asubárvore à esquerda e em seguida a subárvore àdireita.Estes percursos podem ser implementados demaneira iterativa (utilizando uma estrutura de dadosauxiliar);É possível também percorre a árvore em nível.
Árvores Binárias
Discutiremos as seguintes funções:Exibição dos elementos em pré-ordem, em ordeme em pós-ordem (implementações recursivas);Exibição dos em pré-ordem (implementaçãoiterativa);Exibição dos elementos em nível (implementaçãoiterativa);
Modelagem#include <stdio.h>#include <malloc.h>#define true 1#define false 0
typedef int bool;typedef int TIPOCHAVE;
typedef struct aux{TIPOCHAVE chave;struct aux *esq, *dir;
} NO;
typedef NO* PONT;
Modelagem#include <stdio.h>#include <malloc.h>#define true 1#define false 0
typedef int bool;typedef int TIPOCHAVE;
typedef struct aux{TIPOCHAVE chave;struct aux *esq, *dir;
} NO;
typedef NO* PONT;
Percursos Pré/Em/Pós-ordemvoid exibirArvorePreOrdem(PONT raiz){
if (raiz == NULL) return;
printf("%i ",raiz->chave);
exibirArvorePreOrdem(raiz->esq);exibirArvorePreOrdem(raiz->dir);
}
void exibirArvoreEmOrdem(PONT raiz){if (raiz == NULL) return;exibirArvoreEmOrdem(raiz->esq);
printf("%i ",raiz->chave);
exibirArvoreEmOrdem(raiz->dir);}
void exibirArvorePosOrdem(PONT raiz){if (raiz == NULL) return;exibirArvorePosOrdem(raiz->esq);exibirArvorePosOrdem(raiz->dir);
printf("%i ",raiz->chave);
}
Percursos Pré/Em/Pós-ordemvoid exibirArvorePreOrdem(PONT raiz){
if (raiz == NULL) return;printf("%i ",raiz->chave);exibirArvorePreOrdem(raiz->esq);exibirArvorePreOrdem(raiz->dir);
}
void exibirArvoreEmOrdem(PONT raiz){if (raiz == NULL) return;exibirArvoreEmOrdem(raiz->esq);printf("%i ",raiz->chave);exibirArvoreEmOrdem(raiz->dir);
}
void exibirArvorePosOrdem(PONT raiz){if (raiz == NULL) return;exibirArvorePosOrdem(raiz->esq);exibirArvorePosOrdem(raiz->dir);printf("%i ",raiz->chave);
}
Percursos Pré/Em/Pós-ordemvoid exibirArvorePreOrdem(PONT raiz){if (raiz == NULL) return;printf("%i ",raiz->chave);exibirArvorePreOrdem(raiz->esq);exibirArvorePreOrdem(raiz->dir);
}
$ 40 30 60 50
void exibirArvoreEmOrdem(PONT raiz){if (raiz == NULL) return;exibirArvoreEmOrdem(raiz->esq);printf("%i ",raiz->chave);exibirArvoreEmOrdem(raiz->dir);
}
$ 30 40 50 60
void exibirArvorePosOrdem(PONT raiz){if (raiz == NULL) return;exibirArvorePosOrdem(raiz->esq);exibirArvorePosOrdem(raiz->dir);printf("%i ",raiz->chave);
}
$ 30 50 60 40
Percursos Pré/Em/Pós-ordemvoid exibirArvorePreOrdem(PONT raiz){if (raiz == NULL) return;printf("%i ",raiz->chave);exibirArvorePreOrdem(raiz->esq);exibirArvorePreOrdem(raiz->dir);
}
$ 40 30 60 50
void exibirArvoreEmOrdem(PONT raiz){if (raiz == NULL) return;exibirArvoreEmOrdem(raiz->esq);printf("%i ",raiz->chave);exibirArvoreEmOrdem(raiz->dir);
}
$ 30 40 50 60
void exibirArvorePosOrdem(PONT raiz){if (raiz == NULL) return;exibirArvorePosOrdem(raiz->esq);exibirArvorePosOrdem(raiz->dir);printf("%i ",raiz->chave);
}
$ 30 50 60 40
Percursos Pré/Em/Pós-ordemvoid exibirArvorePreOrdem(PONT raiz){if (raiz == NULL) return;printf("%i ",raiz->chave);exibirArvorePreOrdem(raiz->esq);exibirArvorePreOrdem(raiz->dir);
} $ 40
30 60 50
void exibirArvoreEmOrdem(PONT raiz){if (raiz == NULL) return;exibirArvoreEmOrdem(raiz->esq);printf("%i ",raiz->chave);exibirArvoreEmOrdem(raiz->dir);
}
$ 30 40 50 60
void exibirArvorePosOrdem(PONT raiz){if (raiz == NULL) return;exibirArvorePosOrdem(raiz->esq);exibirArvorePosOrdem(raiz->dir);printf("%i ",raiz->chave);
}
$ 30 50 60 40
Percursos Pré/Em/Pós-ordemvoid exibirArvorePreOrdem(PONT raiz){if (raiz == NULL) return;printf("%i ",raiz->chave);exibirArvorePreOrdem(raiz->esq);exibirArvorePreOrdem(raiz->dir);
} $ 40 30
60 50
void exibirArvoreEmOrdem(PONT raiz){if (raiz == NULL) return;exibirArvoreEmOrdem(raiz->esq);printf("%i ",raiz->chave);exibirArvoreEmOrdem(raiz->dir);
}
$ 30 40 50 60
void exibirArvorePosOrdem(PONT raiz){if (raiz == NULL) return;exibirArvorePosOrdem(raiz->esq);exibirArvorePosOrdem(raiz->dir);printf("%i ",raiz->chave);
}
$ 30 50 60 40
Percursos Pré/Em/Pós-ordemvoid exibirArvorePreOrdem(PONT raiz){if (raiz == NULL) return;printf("%i ",raiz->chave);exibirArvorePreOrdem(raiz->esq);exibirArvorePreOrdem(raiz->dir);
} $ 40 30
60 50
void exibirArvoreEmOrdem(PONT raiz){if (raiz == NULL) return;exibirArvoreEmOrdem(raiz->esq);printf("%i ",raiz->chave);exibirArvoreEmOrdem(raiz->dir);
}
$ 30 40 50 60
void exibirArvorePosOrdem(PONT raiz){if (raiz == NULL) return;exibirArvorePosOrdem(raiz->esq);exibirArvorePosOrdem(raiz->dir);printf("%i ",raiz->chave);
}
$ 30 50 60 40
Percursos Pré/Em/Pós-ordemvoid exibirArvorePreOrdem(PONT raiz){if (raiz == NULL) return;printf("%i ",raiz->chave);exibirArvorePreOrdem(raiz->esq);exibirArvorePreOrdem(raiz->dir);
} $ 40 30
60 50
void exibirArvoreEmOrdem(PONT raiz){if (raiz == NULL) return;exibirArvoreEmOrdem(raiz->esq);printf("%i ",raiz->chave);exibirArvoreEmOrdem(raiz->dir);
} $ 30
40 50 60
void exibirArvorePosOrdem(PONT raiz){if (raiz == NULL) return;exibirArvorePosOrdem(raiz->esq);exibirArvorePosOrdem(raiz->dir);printf("%i ",raiz->chave);
}
$ 30 50 60 40
Percursos Pré/Em/Pós-ordemvoid exibirArvorePreOrdem(PONT raiz){if (raiz == NULL) return;printf("%i ",raiz->chave);exibirArvorePreOrdem(raiz->esq);exibirArvorePreOrdem(raiz->dir);
} $ 40 30
60 50
void exibirArvoreEmOrdem(PONT raiz){if (raiz == NULL) return;exibirArvoreEmOrdem(raiz->esq);printf("%i ",raiz->chave);exibirArvoreEmOrdem(raiz->dir);
} $ 30
40 50 60
void exibirArvorePosOrdem(PONT raiz){if (raiz == NULL) return;exibirArvorePosOrdem(raiz->esq);exibirArvorePosOrdem(raiz->dir);printf("%i ",raiz->chave);
}
$ 30 50 60 40
Percursos Pré/Em/Pós-ordemvoid exibirArvorePreOrdem(PONT raiz){if (raiz == NULL) return;printf("%i ",raiz->chave);exibirArvorePreOrdem(raiz->esq);exibirArvorePreOrdem(raiz->dir);
} $ 40 30
60 50
void exibirArvoreEmOrdem(PONT raiz){if (raiz == NULL) return;exibirArvoreEmOrdem(raiz->esq);printf("%i ",raiz->chave);exibirArvoreEmOrdem(raiz->dir);
} $ 30
40 50 60
void exibirArvorePosOrdem(PONT raiz){if (raiz == NULL) return;exibirArvorePosOrdem(raiz->esq);exibirArvorePosOrdem(raiz->dir);printf("%i ",raiz->chave);
} $ 30
50 60 40
Percursos Pré/Em/Pós-ordemvoid exibirArvorePreOrdem(PONT raiz){if (raiz == NULL) return;printf("%i ",raiz->chave);exibirArvorePreOrdem(raiz->esq);exibirArvorePreOrdem(raiz->dir);
} $ 40 30
60 50
void exibirArvoreEmOrdem(PONT raiz){if (raiz == NULL) return;exibirArvoreEmOrdem(raiz->esq);printf("%i ",raiz->chave);exibirArvoreEmOrdem(raiz->dir);
} $ 30 40
50 60
void exibirArvorePosOrdem(PONT raiz){if (raiz == NULL) return;exibirArvorePosOrdem(raiz->esq);exibirArvorePosOrdem(raiz->dir);printf("%i ",raiz->chave);
} $ 30
50 60 40
Percursos Pré/Em/Pós-ordemvoid exibirArvorePreOrdem(PONT raiz){if (raiz == NULL) return;printf("%i ",raiz->chave);exibirArvorePreOrdem(raiz->esq);exibirArvorePreOrdem(raiz->dir);
} $ 40 30 60
50
void exibirArvoreEmOrdem(PONT raiz){if (raiz == NULL) return;exibirArvoreEmOrdem(raiz->esq);printf("%i ",raiz->chave);exibirArvoreEmOrdem(raiz->dir);
} $ 30 40
50 60
void exibirArvorePosOrdem(PONT raiz){if (raiz == NULL) return;exibirArvorePosOrdem(raiz->esq);exibirArvorePosOrdem(raiz->dir);printf("%i ",raiz->chave);
} $ 30
50 60 40
Percursos Pré/Em/Pós-ordemvoid exibirArvorePreOrdem(PONT raiz){if (raiz == NULL) return;printf("%i ",raiz->chave);exibirArvorePreOrdem(raiz->esq);exibirArvorePreOrdem(raiz->dir);
} $ 40 30 60 50
void exibirArvoreEmOrdem(PONT raiz){if (raiz == NULL) return;exibirArvoreEmOrdem(raiz->esq);printf("%i ",raiz->chave);exibirArvoreEmOrdem(raiz->dir);
} $ 30 40
50 60
void exibirArvorePosOrdem(PONT raiz){if (raiz == NULL) return;exibirArvorePosOrdem(raiz->esq);exibirArvorePosOrdem(raiz->dir);printf("%i ",raiz->chave);
} $ 30
50 60 40
Percursos Pré/Em/Pós-ordemvoid exibirArvorePreOrdem(PONT raiz){if (raiz == NULL) return;printf("%i ",raiz->chave);exibirArvorePreOrdem(raiz->esq);exibirArvorePreOrdem(raiz->dir);
} $ 40 30 60 50
void exibirArvoreEmOrdem(PONT raiz){if (raiz == NULL) return;exibirArvoreEmOrdem(raiz->esq);printf("%i ",raiz->chave);exibirArvoreEmOrdem(raiz->dir);
} $ 30 40
50 60
void exibirArvorePosOrdem(PONT raiz){if (raiz == NULL) return;exibirArvorePosOrdem(raiz->esq);exibirArvorePosOrdem(raiz->dir);printf("%i ",raiz->chave);
} $ 30
50 60 40
Percursos Pré/Em/Pós-ordemvoid exibirArvorePreOrdem(PONT raiz){if (raiz == NULL) return;printf("%i ",raiz->chave);exibirArvorePreOrdem(raiz->esq);exibirArvorePreOrdem(raiz->dir);
} $ 40 30 60 50
void exibirArvoreEmOrdem(PONT raiz){if (raiz == NULL) return;exibirArvoreEmOrdem(raiz->esq);printf("%i ",raiz->chave);exibirArvoreEmOrdem(raiz->dir);
} $ 30 40 50
60
void exibirArvorePosOrdem(PONT raiz){if (raiz == NULL) return;exibirArvorePosOrdem(raiz->esq);exibirArvorePosOrdem(raiz->dir);printf("%i ",raiz->chave);
} $ 30
50 60 40
Percursos Pré/Em/Pós-ordemvoid exibirArvorePreOrdem(PONT raiz){if (raiz == NULL) return;printf("%i ",raiz->chave);exibirArvorePreOrdem(raiz->esq);exibirArvorePreOrdem(raiz->dir);
} $ 40 30 60 50
void exibirArvoreEmOrdem(PONT raiz){if (raiz == NULL) return;exibirArvoreEmOrdem(raiz->esq);printf("%i ",raiz->chave);exibirArvoreEmOrdem(raiz->dir);
} $ 30 40 50
60
void exibirArvorePosOrdem(PONT raiz){if (raiz == NULL) return;exibirArvorePosOrdem(raiz->esq);exibirArvorePosOrdem(raiz->dir);printf("%i ",raiz->chave);
} $ 30
50 60 40
Percursos Pré/Em/Pós-ordemvoid exibirArvorePreOrdem(PONT raiz){if (raiz == NULL) return;printf("%i ",raiz->chave);exibirArvorePreOrdem(raiz->esq);exibirArvorePreOrdem(raiz->dir);
} $ 40 30 60 50
void exibirArvoreEmOrdem(PONT raiz){if (raiz == NULL) return;exibirArvoreEmOrdem(raiz->esq);printf("%i ",raiz->chave);exibirArvoreEmOrdem(raiz->dir);
} $ 30 40 50
60
void exibirArvorePosOrdem(PONT raiz){if (raiz == NULL) return;exibirArvorePosOrdem(raiz->esq);exibirArvorePosOrdem(raiz->dir);printf("%i ",raiz->chave);
} $ 30 50
60 40
Percursos Pré/Em/Pós-ordemvoid exibirArvorePreOrdem(PONT raiz){if (raiz == NULL) return;printf("%i ",raiz->chave);exibirArvorePreOrdem(raiz->esq);exibirArvorePreOrdem(raiz->dir);
} $ 40 30 60 50
void exibirArvoreEmOrdem(PONT raiz){if (raiz == NULL) return;exibirArvoreEmOrdem(raiz->esq);printf("%i ",raiz->chave);exibirArvoreEmOrdem(raiz->dir);
} $ 30 40 50 60
void exibirArvorePosOrdem(PONT raiz){if (raiz == NULL) return;exibirArvorePosOrdem(raiz->esq);exibirArvorePosOrdem(raiz->dir);printf("%i ",raiz->chave);
} $ 30 50
60 40
Percursos Pré/Em/Pós-ordemvoid exibirArvorePreOrdem(PONT raiz){if (raiz == NULL) return;printf("%i ",raiz->chave);exibirArvorePreOrdem(raiz->esq);exibirArvorePreOrdem(raiz->dir);
} $ 40 30 60 50
void exibirArvoreEmOrdem(PONT raiz){if (raiz == NULL) return;exibirArvoreEmOrdem(raiz->esq);printf("%i ",raiz->chave);exibirArvoreEmOrdem(raiz->dir);
} $ 30 40 50 60
void exibirArvorePosOrdem(PONT raiz){if (raiz == NULL) return;exibirArvorePosOrdem(raiz->esq);exibirArvorePosOrdem(raiz->dir);printf("%i ",raiz->chave);
} $ 30 50
60 40
Percursos Pré/Em/Pós-ordemvoid exibirArvorePreOrdem(PONT raiz){if (raiz == NULL) return;printf("%i ",raiz->chave);exibirArvorePreOrdem(raiz->esq);exibirArvorePreOrdem(raiz->dir);
} $ 40 30 60 50
void exibirArvoreEmOrdem(PONT raiz){if (raiz == NULL) return;exibirArvoreEmOrdem(raiz->esq);printf("%i ",raiz->chave);exibirArvoreEmOrdem(raiz->dir);
} $ 30 40 50 60
void exibirArvorePosOrdem(PONT raiz){if (raiz == NULL) return;exibirArvorePosOrdem(raiz->esq);exibirArvorePosOrdem(raiz->dir);printf("%i ",raiz->chave);
} $ 30 50 60
40
Percursos Pré/Em/Pós-ordemvoid exibirArvorePreOrdem(PONT raiz){if (raiz == NULL) return;printf("%i ",raiz->chave);exibirArvorePreOrdem(raiz->esq);exibirArvorePreOrdem(raiz->dir);
} $ 40 30 60 50
void exibirArvoreEmOrdem(PONT raiz){if (raiz == NULL) return;exibirArvoreEmOrdem(raiz->esq);printf("%i ",raiz->chave);exibirArvoreEmOrdem(raiz->dir);
} $ 30 40 50 60
void exibirArvorePosOrdem(PONT raiz){if (raiz == NULL) return;exibirArvorePosOrdem(raiz->esq);exibirArvorePosOrdem(raiz->dir);printf("%i ",raiz->chave);
} $ 30 50 60 40
Percursos Pré/Em/Pós-ordemvoid exibirArvorePreOrdem(PONT raiz){if (raiz == NULL) return;printf("%i ",raiz->chave);exibirArvorePreOrdem(raiz->esq);exibirArvorePreOrdem(raiz->dir);
} $ 40 30 60 50
void exibirArvoreEmOrdem(PONT raiz){if (raiz == NULL) return;exibirArvoreEmOrdem(raiz->esq);printf("%i ",raiz->chave);exibirArvoreEmOrdem(raiz->dir);
} $ 30 40 50 60
void exibirArvorePosOrdem(PONT raiz){if (raiz == NULL) return;exibirArvorePosOrdem(raiz->esq);exibirArvorePosOrdem(raiz->dir);printf("%i ",raiz->chave);
} $ 30 50 60 40
AULA e07aAlgoritmos e Estruturas de Dados I
Árvores Binárias - Percursos (parte I)
Luciano Antonio Digiampietri