Neste post vamos construir indutivamente algoritmos que realizam os caminhamentos "pré-ordem", "em-ordem" e "pós-ordem" em árvores binárias. Tais algoritmos são similares, diferindo apenas na ordem em que as chamadas recursivas, que são representantes diretas da hipótese de indução, aparecem.
- Pré-Ordem: visita a raiz, em seguida a subárvore da esquerda e a subárvore da direita.
- Em-Ordem: visita a subárvore da esquerda, e em seguida a raiz e a subárvore da direita.
- Pós-Ordem: vista a subárvore da esquerda, e em seguida a subárvore da direita e a raiz.
O resultado dos caminhamentos aplicados a árvore acima são os seguintes:
- Pré-Ordem: A | B | D | E | C | F | G
- Em-Ordem: D | B | E | A | F | C | G
- Pós-Ordem: D | E | B | F | G | C | A
Idéia indutiva
- Caso base: é trivial, pois não fazemos caminhamento em árvores binárias vazias.
- Hipótese de Indução: podemos assumir que já temos os caminhamentos das subárvores esquerda e direita.
- Caso Geral: Usando as respostas dadas pela hipótese de indução, basta definir quem será impresso/visitado primeiro. Seguindo o esquema dos três tipos de caminhamento apresentados acima.
Caminhamento pré-ordem
- Implementação em C++
void preOrdem(ARVORE *t) { if(t != NULL) { cout << t->info << ' '; preOrdem(t->esq); preOrdem(t->dir); } }Caminhamento em-ordem
- Implementação em C++
void emOrdem(ARVORE *t) { if(t != NULL) { emOrdem(t->esq); cout << t->info << ' '; emOrdem(t->dir); } }Caminhamento pós-ordem
- Implementação em C++
void posOrdem(ARVORE *t) { if(t != NULL) { posOrdem(t->esq); posOrdem(t->dir); cout << t->info << ' '; } }
Nenhum comentário:
Postar um comentário