Escolar Documentos
Profissional Documentos
Cultura Documentos
Estruturas de Dados
Árvores Binárias
Árvores
2
1
03/06/2018
Árvores
3
Árvores
4
Exemplos:
árvore genealógica, organização hierárquica da
empresa, taxonomia de espécies animais, etc.
Podemos representar de forma ligada
(ponteiros) ou sequencial (vetores).
Operações comuns: adicionar, remover, acessar,
percorrer, pesquisar elementos.
2
03/06/2018
Árvores
5
Árvores - Terminologia
6
3
03/06/2018
4
03/06/2018
Árvores
10
5
03/06/2018
Exemplo
11
Exercício1 :
12
6
03/06/2018
Exercício 2
13
Tipos de Árvores
14
7
03/06/2018
Árvores Binárias
16
8
03/06/2018
Árvores Binárias
17
Árvores Binárias
18
9
03/06/2018
Árvores Binárias
19
Árvores Binárias
20
10
03/06/2018
Árvore Binária
21
Árvores Binárias
22
11
03/06/2018
Árvores Binárias
23
Árvores Binárias
24
12
03/06/2018
Árvores Binárias
25
Árvores Binárias
26
13
03/06/2018
Exemplo: expressão a * b + d – (f + g) * e
IMPORTANTE: Todos os
algoritmos são recursivos!
Em cada subárvore
visitada, deve-se aplicar a
ordem correta de visita aos
nós!
•pré-ordem (pré-fixado): - d + * a b e * + f g
• em-ordem (infixado ou interfixado): a * b + d – e * f + g
•pré-ordem (pós-fixado): a b * + d f g + * e -
14
03/06/2018
Árvores Binárias
29
15
03/06/2018
Árvores Binárias
31
//impressao em ordem
void impEmOrdem(ArvoreBin arv){
if(arvVazia(arv)) return;
impEmOrdem(arv->subArvEsq);
cout<<arv->info<<' ';
impEmOrdem(arv->subArvDir);
};
Árvores Binárias
32
16
03/06/2018
Árvores Binárias
33
Árvores Binárias
34
17
03/06/2018
Árvores Binárias
35
Árvores Binárias
36
18
03/06/2018
Árvores Binárias
37
Árvores Binárias
38
19
03/06/2018
Árvores Binárias
39
Árvores Binárias
40
20
03/06/2018
Árvores Binárias
41
else { // há dois filhos
pn = tiraMenor( arv->subArvDir );
// Trocando a info da raiz com o nodo retirado
aux = arv->info;
arv->info = pn->info;
pn->info = aux;
}
cout <<"\nElemento “ << pn->info <<"foi removido com sucesso. ";
return pn;
}
else {
if (elem < arv->info)
return remove(arv->subArvEsq, elem);
else
return remove(arv->subArvDir, elem);
cout << "\nArvore Vazia ou Elemento nao existe na arvore.\n”;
}
}
Árvores Binárias
42
21
03/06/2018
Árvores Binárias
43
Árvores Binárias
44
pn = localiza(arvore,'p');
if ( pn )
cout << "Elemento localizado: \n“ << pn>info;
else
cout << " Elemento nao localizado\n”;
pn = localiza(arvore,'q');
if (pn)
cout << " Elemento localizado: \n“ << pn->info;
else
cout << " Elemento nao localizado\n“;
pn = remove(arvore,'p');
destroiNodo(pn);
impEmOrdem(arvore);
destroi(arvore);
}
22
03/06/2018
Exercícios
45
Exercícios
46
3) Faça um algoritmo para o seguinte menu:
int tela_lista(){
printf("\xC9");
for (i=0; i<=43; i++) printf("\xCD");
printf("\xBB\n");//45
printf("\xBA Escolha sua opção: \xBA\n");
printf("\xBA __________________ \xBA\n");
printf("\xBA \xBA\n");
printf("\xBA 1 - Inserir elemento na Arvore \xBA\n");
printf("\xBA 2 - Remover elemento na Arvore \xBA\n");
printf("\xBA 3 - Localizar elemento na Arvore \xBA\n");
printf("\xBA 4 - Imprimir em Em-ordem Arvore \xBA\n");
printf("\xBA 5 - Imprimir em Pre-ordem Arvore \xBA\n");
printf("\xBA 6 - Imprimir em Pos-ordem Arvore \xBA\n");
printf("\xBA 7 - Numero de nodos nao-terminais \xBA\n");
printf("\xBA 8 - Remove maior elemento \xBA\n");
printf("\xBA 9 - Remove menor elemento \xBA\n");
printf("\xBA 10 - Imprimir altura da Arvore \xBA\n");
printf("\xBA 11 - Limpar a Arvore \xBA\n");
printf("\xBA 12 - Sair do Sistema \xBA\n");
printf("\xBA \xBA\n");
printf("\xC8");
for (i=0; i<=43; i++) printf("\xCD");
printf("\xBC\n");
printf(" Opção: ");
scanf("%d",&op);
return op;
}
23
03/06/2018
Exercícios
47
Exercícios
48
24
03/06/2018
Árvores Binárias
49
Mostrar o código
25