Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal...
-
Upload
moises-jeronimo-cesario-custodio -
Category
Documents
-
view
220 -
download
2
Transcript of Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal...
Adriana Libório Fernandes LinsArthur Cavalcanti AlemÁtila Valgueiro Malta MoreiraFlavio Juvenal da Silva JúniorGustavo Cauê Silva BotelhoMatheus Bispo Arrais de Souza
Murilo Raphael de Souza LiraRafael Alberto Gomes Pereira LimaRafael Brandão LoboRafael Loureiro de CarvalhoTiago Carneiro Pessoa CantoVinicius Miranda Cesar
Árvores BináriasEstruturas dinâmicas formada por nós que
possuem referências para outros dois nós (filhos). Cada nó é raiz de uma sub-árvore
class Arvore { NoArvore raiz; }
class NoArvore { int valor; NoArvore esq; NoArvore dir; }
RAIZ
12
5 9
17 2 4 1
8 7
Pré-work: Árvores em Pré-ordem Pode-se usar pré-work para imprimir uma árvore
em pré-ordem, ou seja, o valor do nó é impresso antes de suas duas sub-árvores
12
12
5
12 5
17
12 5 17
8
12 5 17 8
212 5 17 8 2
9
12 5 17 8 2 94
12 5 17 8 2 9 4712 5 17 8 2 9 4 7
1
12 5 17 8 2 9 4 7 1
Pré-work: Árvores em Pré-ordem Implementação:
void preOrdem(NoArvore arv) { if(arv == null){ return;} arquivo.print(arv.valor + " "); preOrdem(arv.esq); preOrdem(arv.dir); }
Pré-work
Teste do caso base
Chamadas recursivas
Recursão: Árvores Binárias• O mesmo conceito pode ser estendido para
imprimir árvores em pós-ordem (em que o pai é impresso após os filhos) ou in-ordem (o pai é impresso entre os filhos)
• Pode-se usar o conceito de pós-work também para encontrar a altura de uma árvore. A altura de uma árvore é a maior distância entre a raiz e uma folha
• Por padrão, dizemos que uma folha é uma árvore de altura zero
Pós-Work: Altura de Árvores A altura de uma folha é zero, ou seja, uma
referência nula seria uma árvore de altura –1. A altura de um nó qualquer é igual a 1 + a altura da maior sub-árvore.
5Altura: 3
2
Altura: 0
9Altura: 1
12
Altura: 4
Altura: -1 Altura: -1
Pós-work: a altura do pai é calculada após as dos filhos
Pós-Work: Altura de Árvores Implementação:int altura(NoArvore arv) {if (arv == null){return -1;
}int h1 = altura(arv.esq); int h2 = altura(arv.dir);return (1 + Math.max(h1, h2));
}
Teste do caso base
Chamadas recursivas
Pós-work
Árvore de Busca Binária A árvore de busca binária ou árvore de
pesquisa binária é uma árvore onde todos os nós são valores, todo nó à esquerda contém uma sub-árvore com os valores menores que o nó raiz da sub-árvore e todos os nós da sub-árvore à direita contêm somente valores maiores que o nó raiz. Os valores são relevantes na árvore de busca binária. Seu objetivo é estruturar os dados de forma flexível permitindo pesquisa binária.
Inserção na Árvore de BuscaInserir(No,Raiz){
Se raiz é nulaentão: Raiz := No
SenãoSe No > Raiz
então: Inserir(No,Direita da Raiz)Senão
Inserir(No,Esquerda da Raiz)}
Exemplo de InserçãoElementos a serem inseridos: 50,35,
60,40,48,22,78 50
35
22 40
60
48
78
35 < 50
22 < 35
48 > 40
40 > 35
raiz
60 > 50
78 > 60
Remoção na Árvore de BuscaCaso 1:- O nó é uma folha:Remover(Raiz, x){
no := Buscar(Raiz,x)Se no é o filho da direita direita do Pai de no := nuloSenão
esquerda do Pai de no := nulo}
Remoção na Árvore de BuscaCaso 2- O nó possui apenas um filho:Remover(Raiz,x){
no := Buscar(Raiz,x)Se no é o filho da direita
direita do Pai de no := filho de noSenão
esquerda do Pai de no := filho de no}
Remoção na Árvore de BuscaAlguns conceitos importantes: - Sucessor = menor nó entre os maiores
40
50
30 80
90 70
75
60
Qual o sucessor de 50?
Nó 60
Percorre uma vez para a direita
Percorre para a esquerda quantas vezes forem possíveis
Remoção na Árvore de Busca- Predecessor = maior nó entre os menores
Qual é o predecessor de 60 ?
Percorre uma vez para a esquerda
Percorre para a direita quantas vezes forem possíveis
Nó 58