Buscar

Arvore Binaria de Busca

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 34 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 34 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 34 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Estrutura de dadosEstrutura de dados
ABB ABB 
20132013
Prof Melo
Apresentação
• Técnico em Desenvolvimento de Sistemas - Ibratec, Recife-PE
• Bacharel em Sistemas de Informação – FIR, Recife-PE
• Especialista em Docência no Ensino Superior – Faculdade 
Maurício de Nassau, Recife-PE
• Mestre em Ciência da Computação – UFPE/CIN, Recife-PE
• Currículo Lattes http://lattes.cnpq.br/0759508594425296)
• Homepage https://sites.google.com/site/hildebertomelo/
Disciplinas Lecionadas
• Desenvolvimento de Aplicações Desktop
• Programação Orientada a Objetos
• Estrutura de Dados
• Tecnologia da Informação & Sociedade
• Sistemas Operacionais
• Sistemas Distribuídos
• Introdução a Informática
• Lógica de Programação
• Informática Aplicada a Saúde
• Banco de Dados
• Projeto de Banco de Dados
• Análise de Projetos Orientado a Objetos
• Programação Cliente Servidor
• Linguagens de Programação: C, C#, Pascal, PHP, ASP, Delphi, Java, JavaScript
• Programação WEB
Definição
• Representam um conjunto de elementos (nós) 
preservando a relação hierárquica entre eles.
• Formalmente, uma árvore é um conjunto finito T de 
nós, tais que:
– Existe um nó que não é subordinado a nenhum outro nó
denominado raiz da árvore.
– Os demais nós (ligados à raiz por arcos/arestas) formam 
m >= 0 conjuntos disjuntos S1 , S2 , ... , Sm , onde cada um 
destes conjuntos é uma sub-árvore.
Utilidade
• Árvores são úteis na descrição de qualquer 
estrutura que envolve hierarquia, como os 
exemplos:
–Hierarquia de cargos numa empresa;
–Precedência de operações em expressões;
–Análise sintática de textos, 
–Ontologias, etc.
Conceitos
• Os nós subordinados a um nó e ligados a ele 
por um arco são denominados os filhos
daquele nó (pai).
• Os nós subordinados a um nó são irmãos
entre si. 
• O número de filhos (sub-árvores) de um nó é
o grau daquele nó. 
• Um nó de grau zero é chamado folha ou nó
terminal (nó sem filhos). 
• O nível de um nó é a distância daquele nó até
a raiz (número de arcos que devem ser 
percorridos). 
• O nível da raiz é ZERO.
• A altura ou profundidade de uma arvore é
definida pelo nível mais alto da árvore 
acrescido de um ou o número de nós do 
maior ramo.
• Os ancestrais de um nó são os nós existentes 
entre a raiz e o próprio nó.
RAIZ
FOLHAS
Exemplo
• A: raiz da árvores;
• B, C, D, E, H: raízes de 
sub-árvores
• F, G, I, J, K, L, M: folhas
• B, C, D: irmãos, filhos 
de A
• E, F: irmãos, filhos de B
e
k
j
a
db
f
l
c
g
i
h
m
Conceitos
• São estruturas do tipo Árvore, onde há um conceito de ordem e o 
grau de cada nó é menor ou igual a dois, ou seja, cada nó tem, no 
máximo, dois filhos.
• As sub-árvores são identificadas como a da Esquerda e a da Direita.
• Árvore binária é um tipo de árvore.
A
B
A
B
A
B
A
B
A) Duas árvores iguais B) Duas árvores binárias 
diferentes
Conceitos
• As árvores binárias podem ser:
A.Árvore estritamente binária: é uma árvore binária em que cada nó
possui 0 ou 2 filhos.
B.Árvore binária completa: é uma árvore binária cujo o maior nível é o d
e onde cada folha da árvore deve estar neste nível (d) ou no nível d-1.
C. Árvore binária cheia: é uma árvore estritamente binária com 
profundidade d em que todas as folhas estão no nível d.
Exemplos
(A) (B) (C)
Percurso ou Caminhamento
• Uma operação comum é percorrer uma árvore binária, 
seja simplesmente para imprimir o valor de seus 
elementos ou para localizar um determinado elemento.
• No entanto não existe uma ordem natural de percurso 
em uma árvore. Sendo assim, são definidos três métodos 
de percurso:
• Pré-Ordem (pré-fixado)
• Em Ordem (central)
• Pós-Ordem (pós-fixado)
• Sendo esses métodos normalmente definidos 
recursivamente.
Pré-ordem (Pré-fixada)
Percurso em Pré-Ordem
1. Se árvore estiver vazia então fim.
2. Visitar o nó raiz.
3. Percorrer a sub-árvore esquerda, em pré-ordem
4. Percorrer a sub-árvore direita, em pré-ordem.
Void PreOrdem(Raiz *r){ 
If (*r != null) {
Processa (*r); {Ex:imprimir} 
PreOrdem ((*r).esq); 
PreOrdem ((*r).dir); 
} 
}
Em Ordem (Central)
Percurso Em Ordem
1. Se árvore estiver vazia então fim.
2. Percorrer a sub-árvore esquerda, em ordem 
simétrica
3. Visitar o nó raiz.
4. Percorrer a sub-árvore direita, em ordem 
simétrica. Void EmOrdem(Raiz *r){ 
If (*R != null){
EmOrdem ((*r).esq); 
Processa (*r); {Ex:imprimir} 
EmOrdem ((*r).dir); 
}
}
Pós-ordem (Pós-fixada)
Percurso em Pós-Ordem
1. Se árvore estiver vazia então fim.
2. Percorrer a sub-árvore esquerda, em pós-ordem. 
3. Percorrer a sub-árvore direita, em pós-ordem.
4. Visitar o nó raiz.
Void PosOrdem (Raiz *r){ 
If (*r != null){
PosOrdem ((*r).esq); 
PosOrdem ((*r).dir); 
Processa(*r); {Ex:imprimir} 
} 
}
Exercício
• Qual o arranjo dos nó da árvore ao lado, obtido ao percorrê-la em:
– Pré-ordem
– Ordem simétrica
– Pós-ordem
• Responda e justifique sua resposta:
– A árvore acima é uma árvore estritamente binária?
– A árvore acima é uma árvore binária completa?
– A árvore acima é uma árvore binária cheia?
• Quais os nós folhas? 
• Qual o nível de cada nó? 
• Qual a profundidade da árvore? 
• Liste os ancestrais dos nós B, H e F.
Árvore Binária de Busca (ABB)
• Árvore Binária de Busca (ABB)
–Árvores binárias organizadas para facilitar a busca 
de elementos
–Característica: chaveEsq < chaveRaiz < chaveDir
D
F
E G
B
A C
Árvore Binária de Busca (ABB)
• Definição da Estrutura de Dados
• Typedef struct Dado{
– Char nome[60];
– Int idade;
• }
• Typedef struct Raiz{
– Struct Dado dado;
– Struct Raiz *esq;
– Struct Raiz *dir;
• }
Árvore Binária de Busca (ABB)
• Operações sobre ABB
1. Criar arvore vazia 
2. Destruir a arvore
3. Verificar se a arvore está vazia
4. Inserir
5. Pesquisar
6. Alterar
7. Excluir
8. Percurso ou Caminhamento
AAB - Criar / Destruir 
• Void Criar (Raiz *r){
– r = null;
• }
• void Destruir (Raiz *r){
– if (*r “= null){
• Destruir((*r).esq); 
• Destruir((*r).dir);
• Free(*r);
– }
• }
AAB - Vazia 
• Boolean Vazia(Raiz *r){
– Boolean retorno = *r == null? True: false;
– Return retorno;
• }
AAB - Inserir 
• Void inserir(Raiz *r, Dado d){
– If(*r == null){
• *r = (*Raiz) malloc(sizeof(Raiz));
• (*r).dado = d;
– }else if((*r).dado.idade > d.idade){
• Inserir((*r).dir, d);
– }else{
• Inserir((*r).dir, d);
– }
• }
AAB - Pesquisar 
• Raiz pesquisar(Raiz *r, Dado d){
– If(*r == null){
• Return null;
– }else if((*r).idade == d.idade){
• Return *r;
– }else if((*r).dado.idade > d.idade){
• pesquisar((*r).dir, d);
– }else{
• pesquisar((*r).dir, d);
– }
• }
AAB - Alterar 
• Void alterar(Raiz *r, Dado d){
– if((*r).idade == d.idade){
• (*r).dado = d;
– }else if((*r).dado.idade > d.idade){
• pesquisar((*r).dir, d);
– }else{
• pesquisar((*r).dir, d);
– }
• }
AAB – Excluir
• Para excluir um nó de uma árvore deve-se levar em consideração que seus filhos 
devem continuar na árvore e esta deverá continuar ordenada (menor a esquerda e 
maior a direita).
• Então temos três possibilidades que devem ser tratadas separadamente, afim de 
manter intacta a estrutura da árvore binária de busca. Excluir nó que: 
– Não tenha filhos (folha):
• Exclui o nó.
– Tenha somente um dos filhos (esquerdo ou direito):
• Substitui o nó por seu filho.
• Exclui o nó.
– Tenha dois filhos:
• Substitui o nó por outro escolhido, seguindo um dos critérios:
– O menor dos maiores. 
– O maior dos menores.
• Exclui o nó.
AAB – Excluir
Void Remover (Raiz r, Dado d){
Raiz *ptr;
if(*r != null{
if((*r).dado.idade = d.idade){
if((*r).esq == null){ 
*ptr = *r;
*r = (*r).dir;
free(*ptr);
}else if((*r).dir == null){
*ptr = *r;
*r := (*r).esq;
free(*ptr);
}else{
Substituir(*r,(*r).dir);
}
}else if ((*r).dado.dade < d.idade){
Remover((*r).dir,d);
}else{
Remover((*r).esq,d);
}
}
}
AAB – Excluir
• Substitui o nó a ser excluído por outro escolhido 
seguindo um critérios do Menor dos Maiores.
Void Substituir (Raiz *raiz, Raiz *sucessor){
Raiz*ptr;
if ((*sucessor).esq == null){
(*raiz).dado = (*sucessor).dado;
*ptr = *sucessor;
*sucessor = (*sucessor).dir;
free(*ptr);
}else{
Substituir(*raiz,(*sucesso).esq);
}
}
Degeneração (ABB)
• Diferenças muito grande de alturas entre 
sub-àrvores de um nó causando a perda de 
eficiência.
D
F
G
B
I
M
Técnicas de Balanceamento
• Estático : Baseia-se na reorganização total 
dos elementos da árvore em um momento 
apropriado.
• Dinâmico : À medida que os elementos são 
inseridos, a árvore vai sendo balanceada, 
obrigando uma reorganização de seus 
elementos. 
Balanceamento Estático
• Construção de um array com todos os elementos da 
árvore através de um percurso em ordem simétrica.
• Leitura do array de forma semelhante a pesquisa binária 
para a construção de uma nova árvore balanceada.
D
F
G
B
I
M
B D F G I M
Balanceamento Dinâmico (AVL)
• Conceito menos rigoroso sobre o balanceamento, introduzido em 1962 por dois 
matemáticos russos (Adelson e Landis).
• Uma árvore é considerada balanceada se para qualquer nó da árvore, as alturas das sub-
árvores à esquerda e à direita diferem de no máximo de 1.
• Esta diferença é chamada de fator de balanceamento:
– FatBal(n) <= -1, significa que a altura da árvore à esquerda de n é maior que à da direita
– FatBal(n) >= +1, significa que a altura da árvore à esquerda de n é menor que à da direita
– FatBal(n) = 0, significa que a altura da árvore à esquerda de n é igual à da direita
-1
-1
0
+1
0 +1
0
Balanceamento Dinâmico (AVL)
• Após a inserção de um novo nó deve-se recalcular os fatores de 
balanceamento.
• Se houve para um dado nó |FatBal(n)| > 1 então deve-se 
rebalancear a árvores através do roteamento dos nós.
• Neste processo temos dois nós muitos importantes:
– A: Nó ancestral mais próximo do nó inserido com FatBal (n) <> 0 antes da 
inserção.
– B: Filho de A na sub-árvore onde ocorreu a inserção
Perguntas...
Bibliografia
• Livro(s) Texto(s):
• PREISS, Bruno R. Estrutura de Dados e 
Algoritmos. Rio de Janeiro: Campus, 2001.
• PEREIRA, Silvio L. Estruturas de dados 
fundamentais. São Paulo: Érica, 2000.
• AZEREDO, Paulo A. Métodos de 
Classificação de Dados e Análise de suas 
Complexidades. Rio de Janeiro: Campus, 
1995.
• http://www.nuperc.unifacs.br/
Bibliografia
• Livros de referencia:
• WEISS, M. A. Data structures and algorithm 
analysis in C++. California: Benjamin/Cummings, 
1999.
• SEDGEWICK, R. Algorithms in C++: Fundamentals, 
data structures, sorting, searching. New York: 
Addison-Wesley, 2001.
• TANENBAUM, Aaron; LANGSAM, Y. & 
AUGENSTEIN, M. Estruturas de Dados usando C. 
São Paulo: Makron Books, 1995.
• LAFORE, R. Aprenda em 24 horas estrutura de 
dados e algoritmo. Rio de Janeiro: Campus, 1999.
• MORAES, Celso R. Estruturas de Dados e 
Algoritmos. São Paulo: Berkeley Brasil, 2001.

Outros materiais