adriana libório fernandes lins arthur cavalcanti alem Átila valgueiro malta moreira flavio juvenal...

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 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]

Upload: moises-jeronimo-cesario-custodio

Post on 07-Apr-2016

220 views

Category:

Documents


2 download

TRANSCRIPT

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]

Á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 Exemplos:

2

12

5 9

17 2

4

1

7

1

4

3

7

Altura: 4

Altura: 3

Altura: 0

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

12

5 9

17 2 1

4

7

-1 -1

-10 -1

1

2

-1 -1

0

3

4

1

-1

-1 -1

0

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.

Representação da ABB

X

Y < X Z > X

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

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

}