Top Banner
Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva Botelho Matheus Bispo Arrais de Souza Murilo Raphael de Souza Lira Rafael Alberto Gomes Pereira Lima Rafael Brandão Lobo Rafael Loureiro de Carvalho Tiago Carneiro Pessoa Canto Vinicius Miranda Cesar [email protected]
18

Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva Botelho Matheus Bispo.

Apr 07, 2016

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva Botelho Matheus Bispo.

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

[email protected]

Page 2: Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva Botelho Matheus Bispo.

Á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

Page 3: Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva Botelho Matheus Bispo.

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

Page 4: Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva Botelho Matheus Bispo.

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

Page 5: Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva Botelho Matheus Bispo.

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

Page 6: Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva Botelho Matheus Bispo.

Pós-Work: Altura de Árvores Exemplos:

2

12

5 9

17 2

4

1

7

1

4

3

7

Altura: 4

Altura: 3

Altura: 0

Page 7: Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva Botelho Matheus Bispo.

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

Page 8: Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva Botelho Matheus Bispo.

Pós-Work: Altura de Árvores

12

5 9

17 2 1

4

7

-1 -1

-10 -1

1

2

-1 -1

0

3

4

1

-1

-1 -1

0

Page 9: Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva Botelho Matheus Bispo.

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

Page 10: Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva Botelho Matheus Bispo.

Á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.

Page 11: Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva Botelho Matheus Bispo.

Representação da ABB

X

Y < X Z > X

Page 12: Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva Botelho Matheus Bispo.

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)}

Page 13: Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva Botelho Matheus Bispo.

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

Page 14: Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva Botelho Matheus Bispo.

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}

Page 15: Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva Botelho Matheus Bispo.

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}

Page 16: Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva Botelho Matheus Bispo.

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

Page 17: Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva Botelho Matheus Bispo.

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

Page 18: Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva Botelho Matheus Bispo.

Remoção na Árvore de BuscaCaso 3- O nó possui dois filhos:Remover(Raiz,x){

no := Buscar(Raiz,x)Se no é o filho da direita direita do Pai de no := sucessor/predecessor de noSenão esquerda do Pai de no := sucessor/predecessor de noSe sucessor tem filhoPai de sucessor aponta para filho de sucessor

}