rvores
Introduo
Estruturas estudadas: listas, pilhas e filas.
Entretanto, elas no so adequadas para
representar dados que devem ser dispostos de
maneira hierrquica
rvores so estruturas de dados adequadas
para a representao de hierarquias.
Introduo
Exemplos de estruturas em forma de rvores so:
O organograma de uma empresa;
A diviso de um livro em captulos, sees,
tpicos, etc;
A rvore genealgica de uma pessoa.
Organizao de pastas e diretrios de arquivos
num disco.
Definio
De um modo um pouco mais formal, podemos dizer que
uma rvore um conjunto finito de um ou mais nodos (ns
ou vrtices), tais que:
Existe um nodo denominado raiz;
Os demais nodos formam m>= 0 conjuntos disjuntos s1,
s2, ... , sm, tais que cada um desses conjuntos tambm
uma rvore (denominada sub-rvore).
A forma convencional de representar uma rvore est
indicado na figura seguinte. Esta rvore tem nove ns
sendo A o n raiz.
Representao
Representao n raiz
N Raiz
Representao
Os conjuntos das sub-rvores tem de ser disjuntos, portanto, a
estrutura indicada na figura seguinte no uma rvore.
Definies
Se n um n da rvore T ento Tn indica uma sub-rvore de T
com raiz no n n.
Os ns n1, n2, ..., nk das sub-rvores de Tn so chamados de
filhos de n e n o pai destes ns, que so ns irmos. Os ns
B e C so filhos de A e ns irmos.
N filho e irmo do n B
N filho
N filho
N filho e irmo do n H
Definies
Ns sem filhos como os ns D, H, I, F e G so chamados de folhas.
A sub-rvore da esquerda do n A tem raiz em B e a sub-rvore da
direita tem raiz em C, isto est indicado pelos dois ramos saindo de
A.
A ausncia de um ramo na rvore indica uma sub-rvore vazia, como
a sub-rvore da direita do n B.
n folha
n folha
ns folha
Definies
O nvel de um n n pode ser definido do seguinte modo: o
n raiz tem nvel 0, os outros ns tem um nvel que
maior uma unidade que o nvel de seu pai. Na rvore da
figura anterior temos ns nos seguintes nveis:
nvel 0 = A
nvel 1 = B, C
nvel 2 = D, E, F, G
nvel 3 = H, I
Definies
A altura de uma rvore dada pelo nvel mais alto da
rvore.
Representaes
Representao por parnteses aninhados
( A (B) ( C (D (G) (H)) (E) (F (I)) ) )
Grafo
Diagrama de Venn
rvore Binria
Um importante tipo de rvore a rvore binria.
Em uma rvore binria cada n tem no mximo
duas sub-rvores, e quando h somente uma
presente necessrio distinguir entre sub-rvore
esquerda e direita.
rvore Binria
Uma rvore binria A um conjunto finito de
um ou mais nodos (ou ns), tal que:
Existe um n especial denominado raiz da rvore;
Os restantes n-1 ns formam dois conjuntos
disjuntos, Aesq e Adir, chamados de subrvores
esquerda e direita da raiz, as quais so tambm
rvores binrias.
Aplicaes
Como seria a insero da seguinte seqncia
em uma rvore binria?
7 8 2 5 3 10 4
Aplicao
Percursos em rvores
Binrias
O primeiro mtodo, conhecido como percurso
em PR-ORDEM, implica em executar
recursivamente os trs passos na seguinte
ordem:
Visitar a raiz;
Percorrer a sub-rvore da esquerda em pr-ordem;
Percorre a sub-rvore da direita em pr-ordem.
Resumindo : R-E-D
Aplicao
Para a seguinte rvore binria o resultado
do caminhamento PR-ORDEM seria:
FBADCEHGI
Aplicao
Para percorrer a rvore em ORDEM
SIMTRICA (ou EM-ORDEM) executa-se
recursivamente os trs passos na seguinte
ordem:
Percorrer a sub-rvore da esquerda em ordem
simtrica;
Visitar a raiz;
Percorrer a sub-rvore da direita em ordem
simtrica.
Resumindo: E-R-D
Aplicao
Para a seguinte rvore binria o resultado do
caminhamento EM-ORDEM seria:
A B C D E F G H I.
Aplicao
O percurso conhecido como PS-ORDEM
feito a partir dos trs passos na seguinte
ordem:
Percorrer a sub-rvore da esquerda em ps-ordem;
Percorrer a sub-rvore da direita em ps-ordem;
Visitar a raiz;
Resumindo: E-D-R
Aplicao
Para a seguinte rvore binria o resultado
do caminhamento PS-ORDEM seria:
A C E D B G I H F.
Percurso em Pr-Ordem
(RED)
Algoritmo bsico:
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
ABDCEGFHI
Percurso em Em-Ordem
Algoritmo bsico:
1. Se rvore vazia fim
2. percorrer em ordem a sub-rvore esquerda
3. visitar o n raiz
4. percorrer em ordem a sub-rvore direita
DBAEGCHFI
Percurso em Ps-Ordem
Algoritmo bsico:
1. Se rvore vazia fim
2. percorrer em ps-ordem a sub-rvore esquerda
3. percorrer em ps-ordem a sub-rvore direita
4. visitar o n raiz
DBGEHIFCA
Aplicao
Faa voc sozinho, utilizando os 3 tipos de
caminhamento percorra a seguinte rvore
binria:
*
D
C
Estrutura de Dados de
rvore Binria
typedef struct TipoItem{
int cod;
};
typedef struct TipoNo *TipoApontador;
typedef struct TipoNo {
TipoItem Reg;
TipoApontador Esq, Dir ;
};
typedef TipoApontador TipoArvore;
Inicializa a rvore
void Inicializa (TipoArvore *Arvore)
{
*Arvore = NULL ;
}
Pesquisa item
void Pesquisa( TipoItem *x , TipoApontador *p)
{
if (*p == NULL){
printf ( "Erro : Registro nao esta presente na arvore \n" ) ;
return ;
}
if ( x->cod < (*p)->Reg.cod){
Pesquisa(x, &(*p)->Esq) ;
return ;
}
if ( x->cod > (*p)->Reg.cod)
Pesquisa(x, &(*p)->Dir);
else
*x = (*p)->Reg;
}
Insere
void Insere ( TipoItem x , TipoApontador *p)
{
if (*p == NULL){
*p = (TipoApontador)malloc(sizeof(TipoNo));
(*p)->Reg = x;
(*p)->Esq = NULL;
(*p)->Dir = NULL;
return;
}
if(x.cod < (*p)->Reg.cod){
Insere (x, &(*p)->Esq);
return;
}
else if( x.cod > (*p)->Reg.cod)
Insere (x, &(*p)->Dir );
else printf ("Erro:Registro ja existe na arvore\n");
}
Caminha na rvore
void PreOrdem (TipoArvore p)
{
if (p == NULL ) return;
printf ( "%ld \n" , p->Reg.cod);
PreOrdem (p->Esq) ;
PreOrdem (p->Dir ) ;
}
void EmOrdem (TipoArvore p)
{
if (p == NULL ) return;
EmOrdem (p->Esq) ;
printf ("%ld \n, p->Reg.cod);
EmOrdem (p->Dir ) ;
}