Escolar Documentos
Profissional Documentos
Cultura Documentos
13 Arvores 1 PDF
13 Arvores 1 PDF
Aula 13 rvores
Parte 1
Motivao
Busca em vetores e busca binria
rvores
rvores Binrias
TAD Lista
Implementao com ponteiros
Eficiente para insero e remoo
Ineficiente para busca
Implementao com vetor
Ineficiente para insero e remoo
Eficiente para busca, caso a lista seja ordenada
Busca de elemento
T1 T2 ... Tn
Caso a rvore no seja vazia
T possui um n especial, chamado raiz RT
Os demais ns, ou constituem um nico conjunto vazio,
ou so divididos em n conjuntos disjuntos no vazios T1,
T2, , Tn que so, cada uma rvore
Note que a definio recursiva
T1, T2, , Tn so chamadas subrvores de RT
rvores
Definies
Ns: A, B, C, D, E, F, G
Raiz da rvore
Filhos de A
B C D
Filho de D
Filhos de B
E F G
rvores
Definies
Profundidade de um n
Corresponde ao seu nmero de ancestrais
Profundidade de uma rvore
Mxima profundidade de uma folha
Altura de um n
Altura da subrvore com raiz naquele n
Altura de uma rvore
Mxima profundidade de qualquer um de seus ns
rvores
A
ALTURA DE A: 4
ALTURA DE C:
ALTURA DE D:
0
1
B C D E
PROF. DE A: 0
PROF. DE C: 1 F G H I J K L
PROF. DE D: 1
M N O
P
Altura rvore = Profundidade rvore = 4
rvores Binrias
B C
D E F G
H I
rvores Binrias
nvel d
nvel d+1
rvores Binrias
B G
C D E F
rvores Binrias
Estruturas
rvores Binrias
Operaes
ArvoreBinaria<tipo>* inicializaArvore()
Operaes
void imprimeArvore(ArvoreBinaria<tipo>* a)
No<tipo>* insereDireita(ArvoreBinaria<tipo>* a, No<tipo>* noPai, tipo elemento)
No<tipo>* insereEsquerda(ArvoreBinaria<tipo>* a, No<tipo>* noPai, tipo elemento)
bool folha(No<tipo>* no)
bool removeEsquerda(No<tipo>* no)
bool removeDireita(No<tipo>* no)
bool removeNo(ArvoreBinaria<tipo>* a, No<tipo>* no)
void destroiArvore(ArvoreBinaria<tipo>* a)
int alturaArvore(No<tipo>* no)
int alturaNo(No<tipo>* no)
rvores Binrias
Operaes
int profundidadeNo(No<tipo>* no)
int profundidadeArvore(No<tipo>* no)
int numeroDeNosArvore(No<tipo>* no)
int numeroDeFolhasArvore(No<tipo>* no)
No<tipo>* filhoEsquerdo(No<tipo>* no)
No<tipo>* filhoDireito(No<tipo>* no)
void imprimeCaminhos(ArvoreBinaria<tipo>* a)
No<tipo>* encontraElemento(ArvoreBinaria<tipo>* a, tipo elemento)
void caminhoPreOrdem(No<tipo>* no)
void caminhoEmOrdem(No<tipo>* no)
void caminhoPosOrdem(No<tipo>* no)
rvores Binrias
Utilizao
Imprimir a rvore, buscar elemento, destruir, ...
rvores Binrias
Percurso Pr-Ordem
Se a rvore for vazia, fim
Seno
Visitar o n
Percorrer em pr-ordem a subrvore esquerda
Percorrer em pr-ordem a subrvore direita
rvores Binrias
Percurso Em-Ordem
Se a rvore for vazia, fim
Seno
Percorrer em-ordem a subrvore esquerda
Visitar o n
Percorrer em-ordem a subrvore direita
rvores Binrias
Percurso Ps-Ordem
Se a rvore for vazia, fim
Seno
Percorrer em ps-ordem a subrvore esquerda
Percorrer em ps-ordem a subrvore direita
Visitar o n
rvores Binrias
Exerccios
Terminar de implementar as operaes dos slides
Cdigo com as declaraes no Moodle
Possui comentrios explicando o que deve ser implementado