SlideShare une entreprise Scribd logo
1  sur  37
Prof. Adriano Teixeira de Souza
 São estruturas de dados adequadas para a
representação de hierarquias.
 Uma árvore é composta por um conjunto de
nós.
 Existe um nó r, denominado raiz, que contém
zero ou mais subárvores, cujas raízes são
ligadas diretamente a r.
 A raiz se liga a um ou mais elementos, e cada
um destes forma uma nova subárvore. Esses
elementos são seus galhos ou filhos.
 Fundamentos básicos
◦ GRAU – número de subárvores de um nó.
◦ FOLHA – um nó que possui grau zero, ou seja,
não possui subárvores.
◦ FILHOS – são as raízes das subárvores de um
nó.
◦ Nó não terminal é um nó que não é uma folha
e é diferente da raiz.
 Fundamentos básicos
◦ A altura de uma árvore é o comprimento do
caminho mais longo da raiz até uma das
folhas.
◦ Uma árvore nula tem altura 0.
◦ Todos os nós são acessíveis a partir da raiz.
◦ Existe um único caminho entre a raiz e
qualquer outro nó.
 Formas de representação gráfica
 Árvore Binária: Uma árvore binária é uma
árvore que pode ser nula, ou então tem as
seguintes características:
◦ Existe um nó especial denominado raiz;
◦ Nenhum nó tem grau superior a 2 (dois), isto
é, nenhum nó tem mais de dois filhos;
◦ Existe um “senso de posição”, ou seja,
distingue-se entre uma subárvore esquerda e
uma subárvore direita.
 Atravessamento (ou caminhamento) de árvore
é a passagem de forma sistemática por cada
um de seus nós;
 Diferentes formas de percorrer os nós de uma
árvore:
◦ Pré-ordem ou prefixa (busca em
profundidade)
◦ Em ordem ou infixa (ordem central)
◦ Pós-ordem ou posfixa
◦ Em nível
 Pré-ordem (prefixa)
◦ visitar a raiz;
◦ caminhar na subárvore à esquerda, segundo
este caminhamento;
◦ caminhar na subárvore à direita, segundo este
caminhamento.
 Atravessamento em ordem (infixa)
◦ caminhar na subárvore à esquerda, segundo
este caminhamento;
◦ visitar a raiz;
◦ caminhar na subárvore à direita, segundo este
caminhamento.
 Atravessamento pós-ordem (posfixa)
◦ a) caminhar na subárvore à esquerda, segundo
este caminhamento;
◦ b) caminhar na subárvore à direita, segundo
este caminhamento;
◦ c) visitar a raiz.
 Atravessamento em nível
◦ Percorre-se a árvore de cima para baixo e da
direita para a esquerda.
 Árvore Estritamente Binária:
◦ É uma árvore binária na qual todo nó tem 0 ou
2 subárvores, ou seja, nenhum nó tem “filho
único”.
 Árvore Binária Cheia
◦ Todos os nós, exceto os do último nível,
possuem exatamente duas subárvores.
◦ Uma árvore binária cheia de altura h tem 2h –
1 nós.
 Árvore Degenerada
◦ Cada nó possui exatamente um filho, e a
árvore tem o mesmo número de níveis que de
nós
 Uma árvore é denominada árvore binária de
busca se:
◦ Todo elemento da subárvore esquerda é
menor que o elemento raiz;
◦ Nenhum elemento da subárvore direita é
menor que o elemento raiz;
◦ As subárvores direita e esquerda também são
árvores de busca binária.
 Busca
◦ Se o valor for igual à raiz, o valor existe na
árvore.
◦ Se o valor for menor do que a raiz, então deve
buscar-se na subárvore da esquerda, e assim
recursivamente, em todos os nós da
subárvore.
◦ Se o valor for maior que a raiz, deve-se buscar
na subárvore da direita, até alcançar-se o nó
folha da árvore, encontrando ou não o valor
requerido.
 Inserção
◦ Se a árvore estiver vazia, cria um novo no e
insere as informações do novo nó.
◦ Compara a chave a ser inserida com a chave
do nó analisado:
 Se menor, insere a chave na subárvore esquerda;
 Se maior, insere a chave na subárvore direita.
 Inserção
 Exemplo:
◦ Inserir os seguintes elementos: 7, 13, 20, 4, 1,
18, 5, 11 .
 Remoção
 A remoção de um nó é um processo mais
complexo. Para excluir um nó de uma árvore
binária de busca, há de se considerar três
casos distintos:
◦ Remoção na folha
◦ Remoção de um nó com um filho
◦ Remoção de um nó com dois filhos
 Remoção na folha
◦ A exclusão na folha é a mais simples, basta
removê-lo da árvore.
 Remoção de um nó com um filho
◦ Excluindo-o, o filho sobe para a posição do
pai.
 Remoção de um nó com dois filhos
◦ Neste caso, pode-se operar de duas maneiras
diferentes:
 Substitui-se o valor do nó a ser retirado pelo
valor sucessor (o nó mais à esquerda da
subárvore direita);
 Substitui-se o valor do nó a ser retirado pelo
valor antecessor (o nó mais à direita da
subárvore esquerda)
 Remoção de um nó com dois filhos
◦ Exemplo de remoção substituindo o nó pelo
seu antecessor.
 Remoção de um nó com dois filhos
◦ Exemplo de remoção substituindo o nó pelo
seu sucessor.
 Árvore é representada pelo ponteiro para o nó raiz
public class NoArvore {
int info;
NoArvore direita;
NoArvore esquerda;
}
 Imprime os valores da árvore em ordem crescente,
percorrendo os nós em ordem simétrica
void abb_imprime (NoArvore a)
{
if (a != null) {
abb_imprime(a.esquerda);
System.out.println(a.info+"n");
abb_imprime(a.direita);
}
}
 Explora a propriedade de ordenação da árvore
 Possui desempenho computacional proporcional à
altura
NoArvore abb_busca (NoArvore r, int v)
{
if (r == null)
return null;
else if (r.info > v)
return abb_busca (r.esquerda, v);
else if (r.info < v)
return abb_busca (r.direita, v);
else return r;
}
 recebe um valor v a ser inserido
 retorna o eventual novo nó raiz da (sub-)árvore
 para adicionar v na posição correta, faça:
◦ se a (sub-)árvore for vazia
 crie uma árvore cuja raiz contém v
◦ se a (sub-)árvore não for vazia
 compare v com o valor na raiz
 insira v na sae ou na sad, conforme o resultado da
comparação
NoArvore abb_insere (NoArvore a, int v)
{
if (a==null) {
a = new NoArvore();
a.info = v;
a.esquerda = a.direita = null;
}
else if (v < a.info)
a.esquerda = abb_insere(a.esquerda,v);
else /* v >= a->info */
a.direita = abb_insere(a.direita,v);
return a;
}
é necessário atualizar os ponteiros para
as sub-árvores à esquerda ou à direita
quando da chamada recursiva da função,
pois a função de inserção pode alterar
o valor do ponteiro para a raiz da (sub-)árvore.
Cria
insere 6
insere 8
insere 4
insere 5
insere 2
insere 3
insere 1
insere 9
insere 7
 recebe um valor v a ser inserido
 retorna a eventual nova raiz da árvore
 para remover v, faça:
◦ se a árvore for vazia
 nada tem que ser feito
◦ se a árvore não for vazia
 compare o valor armazenado no nó raiz com v
 se for maior que v, retire o elemento da sub-árvore à
esquerda
 se for menor do que v, retire o elemento da sub-
árvore à direita
 se for igual a v, retire a raiz da árvore
 para retirar a raiz da árvore, há 3 casos:
◦ caso 1: a raiz que é folha
◦ caso 2: a raiz a ser retirada possui um único filho
◦ caso 3: a raiz a ser retirada tem dois filhos
 Caso 1: a raiz da sub-árvore é folha da árvore
original
◦ libere a memória alocada pela raiz
◦ retorne a raiz atualizada, que passa a ser NULL
 Caso 2: a raiz a ser retirada possui um único filho
◦ libere a memória alocada pela raiz
◦ a raiz da árvore passa a ser o único filho da raiz
 Caso 3: a raiz a ser retirada tem dois filhos
◦ encontre o nó N que precede a raiz na ordenação
◦ (o elemento mais à direita da sub-árvore à esquerda)
◦ troque o dado da raiz com o dado de N
◦ retire N da sub-árvore à esquerda
◦ (que agora contém o dado da raiz que se deseja retirar)
 retirar o nó N mais à direita é trivial, pois N é um nó folha ou
 N é um nó com um único filho (no caso, o filho da direita
nunca existe)
NoArvore abb_retira (NoArvore r, int v)
{
if (r == null)
return null;
else if (r.info > v)
r.esquerda = abb_retira(r.esquerda, v);
else if (r.info < v)
r.direita = abb_retira(r.direita, v);
else { /* achou o nó a remover */
/* nó sem filhos */
if (r.esquerda == null && r.direita == null) {
//free (r);
r = null;
}
/* nó só tem filho à direita */
else if (r.esquerda == null) {
NoArvore t = r;
r = r.direita;
//free (t);
}
/* só tem filho à esquerda */
else if (r.direita == null) {
NoArvore t = r;
r = r.esquerda;
//free (t);
}
/* nó tem os dois filhos */
else {
NoArvore f = r.esquerda;
while (f.direita != null) {
f = f.direita;
}
r.info = f.info; /* troca as informações */
f.info = v;
r.esquerda = abb_retira(r.esquerda,v);
}
}
return r;
}

Contenu connexe

Tendances

Banco de dados - Mapeamento MER - Relacional
Banco de dados - Mapeamento MER - RelacionalBanco de dados - Mapeamento MER - Relacional
Banco de dados - Mapeamento MER - RelacionalDaniel Brandão
 
Banco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DERBanco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DERRangel Javier
 
Apresentação sobre Árvores B
Apresentação sobre Árvores BApresentação sobre Árvores B
Apresentação sobre Árvores BThiago Colares
 
Aula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de ProjetoAula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de ProjetoVinícius de Paula
 
5- Modelo entidade Relacionamento - Cardinalidade - Profª Cristiane Fidelix
5- Modelo entidade Relacionamento - Cardinalidade - Profª Cristiane Fidelix5- Modelo entidade Relacionamento - Cardinalidade - Profª Cristiane Fidelix
5- Modelo entidade Relacionamento - Cardinalidade - Profª Cristiane FidelixCris Fidelix
 
Conceitos de Banco de dados e SGBD
Conceitos de Banco de dados e SGBDConceitos de Banco de dados e SGBD
Conceitos de Banco de dados e SGBDVinicius Buffolo
 
Estrutura de Dados - Aula 04 - Listas Estáticas
Estrutura de Dados - Aula 04 - Listas EstáticasEstrutura de Dados - Aula 04 - Listas Estáticas
Estrutura de Dados - Aula 04 - Listas EstáticasLeinylson Fontinele
 
Árvores Balanceadas AVL
Árvores Balanceadas AVLÁrvores Balanceadas AVL
Árvores Balanceadas AVLDaniel Maia
 
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)Leinylson Fontinele
 
Estrutura de Dados Apoio (Tabela Hash)
Estrutura de Dados Apoio (Tabela Hash)Estrutura de Dados Apoio (Tabela Hash)
Estrutura de Dados Apoio (Tabela Hash)Leinylson Fontinele
 
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Leinylson Fontinele
 
Aula 5 - Modelo de Entidade e Relacionamento - MER
Aula 5 - Modelo de Entidade e Relacionamento - MER Aula 5 - Modelo de Entidade e Relacionamento - MER
Aula 5 - Modelo de Entidade e Relacionamento - MER Vitor Hugo Melo Araújo
 
Aula 01 - Fundamentos de Banco de Dados (2).pdf
Aula 01 - Fundamentos de Banco de Dados (2).pdfAula 01 - Fundamentos de Banco de Dados (2).pdf
Aula 01 - Fundamentos de Banco de Dados (2).pdfMarcelo Silva
 

Tendances (20)

Banco de dados - Mapeamento MER - Relacional
Banco de dados - Mapeamento MER - RelacionalBanco de dados - Mapeamento MER - Relacional
Banco de dados - Mapeamento MER - Relacional
 
Banco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DERBanco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DER
 
Apresentação sobre Árvores B
Apresentação sobre Árvores BApresentação sobre Árvores B
Apresentação sobre Árvores B
 
Aula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de ProjetoAula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de Projeto
 
Classes e Estrutura de Dados
Classes e Estrutura de DadosClasses e Estrutura de Dados
Classes e Estrutura de Dados
 
5- Modelo entidade Relacionamento - Cardinalidade - Profª Cristiane Fidelix
5- Modelo entidade Relacionamento - Cardinalidade - Profª Cristiane Fidelix5- Modelo entidade Relacionamento - Cardinalidade - Profª Cristiane Fidelix
5- Modelo entidade Relacionamento - Cardinalidade - Profª Cristiane Fidelix
 
Conceitos de Banco de dados e SGBD
Conceitos de Banco de dados e SGBDConceitos de Banco de dados e SGBD
Conceitos de Banco de dados e SGBD
 
Estrutura de Dados - Aula 04 - Listas Estáticas
Estrutura de Dados - Aula 04 - Listas EstáticasEstrutura de Dados - Aula 04 - Listas Estáticas
Estrutura de Dados - Aula 04 - Listas Estáticas
 
Árvores Balanceadas AVL
Árvores Balanceadas AVLÁrvores Balanceadas AVL
Árvores Balanceadas AVL
 
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
 
Aula 9 banco de dados
Aula 9   banco de dadosAula 9   banco de dados
Aula 9 banco de dados
 
Tabela Hash
Tabela HashTabela Hash
Tabela Hash
 
Estrutura de Dados Apoio (Tabela Hash)
Estrutura de Dados Apoio (Tabela Hash)Estrutura de Dados Apoio (Tabela Hash)
Estrutura de Dados Apoio (Tabela Hash)
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Linguagem C - Vetores
Linguagem C - VetoresLinguagem C - Vetores
Linguagem C - Vetores
 
Aula 6 banco de dados
Aula 6   banco de dadosAula 6   banco de dados
Aula 6 banco de dados
 
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
 
Aula 5 - Modelo de Entidade e Relacionamento - MER
Aula 5 - Modelo de Entidade e Relacionamento - MER Aula 5 - Modelo de Entidade e Relacionamento - MER
Aula 5 - Modelo de Entidade e Relacionamento - MER
 
Aula 01 - Fundamentos de Banco de Dados (2).pdf
Aula 01 - Fundamentos de Banco de Dados (2).pdfAula 01 - Fundamentos de Banco de Dados (2).pdf
Aula 01 - Fundamentos de Banco de Dados (2).pdf
 
Estrutura de dados - Pilhas
Estrutura de dados - PilhasEstrutura de dados - Pilhas
Estrutura de dados - Pilhas
 

En vedette

Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Adriano Teixeira de Souza
 
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Adriano Teixeira de Souza
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Adriano Teixeira de Souza
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Adriano Teixeira de Souza
 
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSSistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSAdriano Teixeira de Souza
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Adriano Teixeira de Souza
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Adriano Teixeira de Souza
 
Arvores Binarias
Arvores BinariasArvores Binarias
Arvores BinariasBrian Supra
 
Árvores binárias balanceadas
Árvores binárias balanceadasÁrvores binárias balanceadas
Árvores binárias balanceadasrenatopaschoal
 
17 arvores binarias de busca
17   arvores binarias de busca17   arvores binarias de busca
17 arvores binarias de buscaRicardo Bolanho
 
Operações em Árvores Binárias
Operações em Árvores BináriasOperações em Árvores Binárias
Operações em Árvores Bináriaselliando dias
 
ACII - SL03 - Armazenamento Secundario
ACII - SL03 - Armazenamento SecundarioACII - SL03 - Armazenamento Secundario
ACII - SL03 - Armazenamento SecundarioUFPB
 

En vedette (20)

Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
 
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
 
Estrutura de dados em Java - Recursividade
Estrutura de dados em Java - RecursividadeEstrutura de dados em Java - Recursividade
Estrutura de dados em Java - Recursividade
 
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
 
Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)
 
Estrutura de dados em Java - Pilhas
Estrutura de dados em Java - PilhasEstrutura de dados em Java - Pilhas
Estrutura de dados em Java - Pilhas
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
 
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSSistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória
 
Arvores Binarias
Arvores BinariasArvores Binarias
Arvores Binarias
 
Apresent trab grafos
Apresent trab grafosApresent trab grafos
Apresent trab grafos
 
Árvores binárias balanceadas
Árvores binárias balanceadasÁrvores binárias balanceadas
Árvores binárias balanceadas
 
Grafos
GrafosGrafos
Grafos
 
17 arvores binarias de busca
17   arvores binarias de busca17   arvores binarias de busca
17 arvores binarias de busca
 
Operações em Árvores Binárias
Operações em Árvores BináriasOperações em Árvores Binárias
Operações em Árvores Binárias
 
ACII - SL03 - Armazenamento Secundario
ACII - SL03 - Armazenamento SecundarioACII - SL03 - Armazenamento Secundario
ACII - SL03 - Armazenamento Secundario
 

Similaire à Estruturas de dados árvore: conceitos e operações básicas

Similaire à Estruturas de dados árvore: conceitos e operações básicas (6)

Aula 18
Aula 18Aula 18
Aula 18
 
Aula 19
Aula 19Aula 19
Aula 19
 
Pged 08
Pged 08Pged 08
Pged 08
 
Árvores: Conceitos e binárias
Árvores:  Conceitos e bináriasÁrvores:  Conceitos e binárias
Árvores: Conceitos e binárias
 
Inf01203 arvbinarias
Inf01203 arvbinariasInf01203 arvbinarias
Inf01203 arvbinarias
 
Arvores b
Arvores bArvores b
Arvores b
 

Plus de Adriano Teixeira de Souza

Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaAdriano Teixeira de Souza
 
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Adriano Teixeira de Souza
 
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesParadigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleParadigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de AtribuiçãoParadigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de AtribuiçãoAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosParadigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Tipos Abstratos de Dados
Paradigmas de Linguagens de Programação - Tipos Abstratos de DadosParadigmas de Linguagens de Programação - Tipos Abstratos de Dados
Paradigmas de Linguagens de Programação - Tipos Abstratos de DadosAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmicoParadigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmicoAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - ClassificaçõesParadigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - ClassificaçõesAdriano Teixeira de Souza
 
Estrutura de dados - Introdução a linguagem C
Estrutura de dados - Introdução a linguagem CEstrutura de dados - Introdução a linguagem C
Estrutura de dados - Introdução a linguagem CAdriano Teixeira de Souza
 

Plus de Adriano Teixeira de Souza (15)

Responsive web design
Responsive web designResponsive web design
Responsive web design
 
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
 
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
 
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
 
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
 
Paradigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesParadigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de Exceções
 
Paradigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleParadigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de Controle
 
Paradigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de AtribuiçãoParadigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
 
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosParadigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
 
Paradigmas de Linguagens de Programação - Tipos Abstratos de Dados
Paradigmas de Linguagens de Programação - Tipos Abstratos de DadosParadigmas de Linguagens de Programação - Tipos Abstratos de Dados
Paradigmas de Linguagens de Programação - Tipos Abstratos de Dados
 
Paradigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmicoParadigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmico
 
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
 
Paradigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - ClassificaçõesParadigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - Classificações
 
Estrutura de dados - Introdução a linguagem C
Estrutura de dados - Introdução a linguagem CEstrutura de dados - Introdução a linguagem C
Estrutura de dados - Introdução a linguagem C
 

Estruturas de dados árvore: conceitos e operações básicas

  • 2.  São estruturas de dados adequadas para a representação de hierarquias.  Uma árvore é composta por um conjunto de nós.  Existe um nó r, denominado raiz, que contém zero ou mais subárvores, cujas raízes são ligadas diretamente a r.  A raiz se liga a um ou mais elementos, e cada um destes forma uma nova subárvore. Esses elementos são seus galhos ou filhos.
  • 3.  Fundamentos básicos ◦ GRAU – número de subárvores de um nó. ◦ FOLHA – um nó que possui grau zero, ou seja, não possui subárvores. ◦ FILHOS – são as raízes das subárvores de um nó. ◦ Nó não terminal é um nó que não é uma folha e é diferente da raiz.
  • 4.  Fundamentos básicos ◦ A altura de uma árvore é o comprimento do caminho mais longo da raiz até uma das folhas. ◦ Uma árvore nula tem altura 0. ◦ Todos os nós são acessíveis a partir da raiz. ◦ Existe um único caminho entre a raiz e qualquer outro nó.
  • 5.  Formas de representação gráfica
  • 6.  Árvore Binária: Uma árvore binária é uma árvore que pode ser nula, ou então tem as seguintes características: ◦ Existe um nó especial denominado raiz; ◦ Nenhum nó tem grau superior a 2 (dois), isto é, nenhum nó tem mais de dois filhos; ◦ Existe um “senso de posição”, ou seja, distingue-se entre uma subárvore esquerda e uma subárvore direita.
  • 7.  Atravessamento (ou caminhamento) de árvore é a passagem de forma sistemática por cada um de seus nós;  Diferentes formas de percorrer os nós de uma árvore: ◦ Pré-ordem ou prefixa (busca em profundidade) ◦ Em ordem ou infixa (ordem central) ◦ Pós-ordem ou posfixa ◦ Em nível
  • 8.  Pré-ordem (prefixa) ◦ visitar a raiz; ◦ caminhar na subárvore à esquerda, segundo este caminhamento; ◦ caminhar na subárvore à direita, segundo este caminhamento.
  • 9.  Atravessamento em ordem (infixa) ◦ caminhar na subárvore à esquerda, segundo este caminhamento; ◦ visitar a raiz; ◦ caminhar na subárvore à direita, segundo este caminhamento.
  • 10.  Atravessamento pós-ordem (posfixa) ◦ a) caminhar na subárvore à esquerda, segundo este caminhamento; ◦ b) caminhar na subárvore à direita, segundo este caminhamento; ◦ c) visitar a raiz.
  • 11.  Atravessamento em nível ◦ Percorre-se a árvore de cima para baixo e da direita para a esquerda.
  • 12.  Árvore Estritamente Binária: ◦ É uma árvore binária na qual todo nó tem 0 ou 2 subárvores, ou seja, nenhum nó tem “filho único”.
  • 13.  Árvore Binária Cheia ◦ Todos os nós, exceto os do último nível, possuem exatamente duas subárvores. ◦ Uma árvore binária cheia de altura h tem 2h – 1 nós.
  • 14.  Árvore Degenerada ◦ Cada nó possui exatamente um filho, e a árvore tem o mesmo número de níveis que de nós
  • 15.  Uma árvore é denominada árvore binária de busca se: ◦ Todo elemento da subárvore esquerda é menor que o elemento raiz; ◦ Nenhum elemento da subárvore direita é menor que o elemento raiz; ◦ As subárvores direita e esquerda também são árvores de busca binária.
  • 16.  Busca ◦ Se o valor for igual à raiz, o valor existe na árvore. ◦ Se o valor for menor do que a raiz, então deve buscar-se na subárvore da esquerda, e assim recursivamente, em todos os nós da subárvore. ◦ Se o valor for maior que a raiz, deve-se buscar na subárvore da direita, até alcançar-se o nó folha da árvore, encontrando ou não o valor requerido.
  • 17.  Inserção ◦ Se a árvore estiver vazia, cria um novo no e insere as informações do novo nó. ◦ Compara a chave a ser inserida com a chave do nó analisado:  Se menor, insere a chave na subárvore esquerda;  Se maior, insere a chave na subárvore direita.
  • 18.  Inserção  Exemplo: ◦ Inserir os seguintes elementos: 7, 13, 20, 4, 1, 18, 5, 11 .
  • 19.  Remoção  A remoção de um nó é um processo mais complexo. Para excluir um nó de uma árvore binária de busca, há de se considerar três casos distintos: ◦ Remoção na folha ◦ Remoção de um nó com um filho ◦ Remoção de um nó com dois filhos
  • 20.  Remoção na folha ◦ A exclusão na folha é a mais simples, basta removê-lo da árvore.
  • 21.  Remoção de um nó com um filho ◦ Excluindo-o, o filho sobe para a posição do pai.
  • 22.  Remoção de um nó com dois filhos ◦ Neste caso, pode-se operar de duas maneiras diferentes:  Substitui-se o valor do nó a ser retirado pelo valor sucessor (o nó mais à esquerda da subárvore direita);  Substitui-se o valor do nó a ser retirado pelo valor antecessor (o nó mais à direita da subárvore esquerda)
  • 23.  Remoção de um nó com dois filhos ◦ Exemplo de remoção substituindo o nó pelo seu antecessor.
  • 24.  Remoção de um nó com dois filhos ◦ Exemplo de remoção substituindo o nó pelo seu sucessor.
  • 25.  Árvore é representada pelo ponteiro para o nó raiz public class NoArvore { int info; NoArvore direita; NoArvore esquerda; }
  • 26.  Imprime os valores da árvore em ordem crescente, percorrendo os nós em ordem simétrica void abb_imprime (NoArvore a) { if (a != null) { abb_imprime(a.esquerda); System.out.println(a.info+"n"); abb_imprime(a.direita); } }
  • 27.  Explora a propriedade de ordenação da árvore  Possui desempenho computacional proporcional à altura NoArvore abb_busca (NoArvore r, int v) { if (r == null) return null; else if (r.info > v) return abb_busca (r.esquerda, v); else if (r.info < v) return abb_busca (r.direita, v); else return r; }
  • 28.  recebe um valor v a ser inserido  retorna o eventual novo nó raiz da (sub-)árvore  para adicionar v na posição correta, faça: ◦ se a (sub-)árvore for vazia  crie uma árvore cuja raiz contém v ◦ se a (sub-)árvore não for vazia  compare v com o valor na raiz  insira v na sae ou na sad, conforme o resultado da comparação
  • 29. NoArvore abb_insere (NoArvore a, int v) { if (a==null) { a = new NoArvore(); a.info = v; a.esquerda = a.direita = null; } else if (v < a.info) a.esquerda = abb_insere(a.esquerda,v); else /* v >= a->info */ a.direita = abb_insere(a.direita,v); return a; } é necessário atualizar os ponteiros para as sub-árvores à esquerda ou à direita quando da chamada recursiva da função, pois a função de inserção pode alterar o valor do ponteiro para a raiz da (sub-)árvore.
  • 30. Cria insere 6 insere 8 insere 4 insere 5 insere 2 insere 3 insere 1 insere 9 insere 7
  • 31.  recebe um valor v a ser inserido  retorna a eventual nova raiz da árvore  para remover v, faça: ◦ se a árvore for vazia  nada tem que ser feito ◦ se a árvore não for vazia  compare o valor armazenado no nó raiz com v  se for maior que v, retire o elemento da sub-árvore à esquerda  se for menor do que v, retire o elemento da sub- árvore à direita  se for igual a v, retire a raiz da árvore
  • 32.  para retirar a raiz da árvore, há 3 casos: ◦ caso 1: a raiz que é folha ◦ caso 2: a raiz a ser retirada possui um único filho ◦ caso 3: a raiz a ser retirada tem dois filhos
  • 33.  Caso 1: a raiz da sub-árvore é folha da árvore original ◦ libere a memória alocada pela raiz ◦ retorne a raiz atualizada, que passa a ser NULL
  • 34.  Caso 2: a raiz a ser retirada possui um único filho ◦ libere a memória alocada pela raiz ◦ a raiz da árvore passa a ser o único filho da raiz
  • 35.  Caso 3: a raiz a ser retirada tem dois filhos ◦ encontre o nó N que precede a raiz na ordenação ◦ (o elemento mais à direita da sub-árvore à esquerda) ◦ troque o dado da raiz com o dado de N ◦ retire N da sub-árvore à esquerda ◦ (que agora contém o dado da raiz que se deseja retirar)  retirar o nó N mais à direita é trivial, pois N é um nó folha ou  N é um nó com um único filho (no caso, o filho da direita nunca existe)
  • 36. NoArvore abb_retira (NoArvore r, int v) { if (r == null) return null; else if (r.info > v) r.esquerda = abb_retira(r.esquerda, v); else if (r.info < v) r.direita = abb_retira(r.direita, v); else { /* achou o nó a remover */ /* nó sem filhos */ if (r.esquerda == null && r.direita == null) { //free (r); r = null; } /* nó só tem filho à direita */ else if (r.esquerda == null) { NoArvore t = r; r = r.direita; //free (t); }
  • 37. /* só tem filho à esquerda */ else if (r.direita == null) { NoArvore t = r; r = r.esquerda; //free (t); } /* nó tem os dois filhos */ else { NoArvore f = r.esquerda; while (f.direita != null) { f = f.direita; } r.info = f.info; /* troca as informações */ f.info = v; r.esquerda = abb_retira(r.esquerda,v); } } return r; }