Anda di halaman 1dari 48

19/02/2013

ESTRUTURAS DE DADOS E ALGORITMOS RVORE BINRIA


1

Adalberto Cajueiro Departamento de Sistemas e Computao Universidade Federal de Campina Grande

RVORE (EXEMPLO)

Como seria pesquisar a localizao de um arquivo no windows explorer se no tivssemos diretrios?


Para entradas realmente grandes, o acesso linear proibitivo!
Precisamos de alguma estrutura nao-linear de acesso mais eficiente.
2

19/02/2013

RVORE
Estrutura no-linear com tempo de acesso em mdia O(log n). Coleo de ns em hierarquia

Vazia ou Raiz (root) e zero ou mais subrvores

Raiz da subrvore um n filho do n raiz

A raiz de uma rvore unica!

No possui ciclos N ns, N-1 arestas


3

RVORE (ILUSTRACAO)

raiz

root

raiz

...

19/02/2013

RVORE (ILUSTRACAO)
raiz

... folha (leaf)

RVORE

raiz

Nvel 0

Nvel 1 ... Nvel k Nvel k + 1 Altura = k+1

19/02/2013

RVORE
Uma

rvore binria uma estrutura de dados caracterizada por:


Ou no tem elemento algum (rvore vazia) Ou tem um elemento distinto, denominado raiz, com duas referencias para duas estruturas diferentes, denominadas sub-rvore (filho) esquerda e sub-rvore (filho) direita Cada n pode ter grau: 0, 1 ou 2

RVORE

A ligao entre os ns so vistas como apontadores direcionados do pai para os filhos.

Por questoes de implementao apontadores podem existir tambm dos filhos para o pai

O numero de filhos por n diferenciam os vrios tipos de arvores existentes. Cada n da rvore encontra-se em determinado nvel. A raiz encontra-se no nvel zero. Propriedade fundamental: s existe um caminho da raiz para um outro n da rvore. Altura de uma rvore: comprimento do caminho mais longo da raiz at as folhas

19/02/2013

RVORE (APLICABILIDADE)
Representacao

de expressoes aritmticas

5*3 + 4/2

+ * 5 3 4 / 2

EXERCCIO
Qual

a profundidade do n 6? Qual a altura da rvore? Os ns 6 e 9 esto no mesmo nvel? e 7 e 11? Qual o grau do n 7? E de 9? E de 4?
10

19/02/2013

RVORES ESTRITAMENTE BINRIAS


Cada n possui grau 0 ou 2 Quantos ns ter uma AEB com n folhas?

7 4
Desenhe diversas arvores e tente deduzir.

6 9 3 2 1
11

EXERCCIO

A rvore a seguir estritamente binria? Justifique.

12

19/02/2013

RVORE BINRIA COMPLETA


Todos

os nveis so completos (folhas esto no mesmo nvel)


Qual a relacao que existe entre a altura de uma rvore binria completa e o nmero de elementos em cada nvel? Qual a relacao que existe entre a altura de uma rvore binria completa e o nmero de elementos no total?
nvel 0 nos:1 total:1 nvel 1 nos:2 total:3 nvel 2 nos:4 total:7
13

nvel 3 nos:8 total:15

RVORE BINRIA COMPLETA


Todos

os nveis so completos (folhas esto no mesmo nvel)


Qual a relacao que existe entre a altura de uma rvore binria completa e o nmero de elementos em cada nvel? Qual a relacao que existe entre a altura de uma rvore binria completa e o nmero de elementos no total?
nvel 0 nos:1 total:1 nvel 1 nos:2 total:3 nvel 2 nos:4 total:7
14

nvel 3 nos:8 total:15

2h

2h+1 - 1

19/02/2013

RVORES BINRIAS (PERCURSOS)

Formas de percurso em rvore binrias: Pr-ordem (RAIZ, ESQ, DIR)


Visita raiz Percorre sub-rvore esquerda em pr-ordem Percorre sub-rvore direita em pr-ordem Percorre sub-rvore esquerda em ordem simtrica Visita raiz Percorre sub-rvore direita em ordem simtrica Percorre sub-rvore esquerda em ps-ordem Percorre sub-rvore direita em ps-ordem Visita raiz
15

Em-ordem (simtrica) (ESQ, RAIZ, DIR)


Ps-ordem (ESQ, DIR, RAIZ)


Applet:

http://www.cosc.canterbury.ac.nz/mukundan/dsal/BTree.html

ARVORES BINRIAS

Impresso em pr-ordem (R,E,D):


8

12

10

14

11

13

15
16

19/02/2013

ARVORES BINRIAS

Impresso em pr-ordem:
8

8
12

10

14

11

13

15
17

ARVORES BINRIAS

Impresso em pr-ordem:
8

8,4
12

10

14

11

13

15
18

19/02/2013

ARVORES BINRIAS

Impresso em pr-ordem:
8

8,4,2
12

10

14

11

13

15
19

ARVORES BINRIAS

Impresso em pr-ordem:
8

8,4,2,1
12

10

14

11

13

15
20

10

19/02/2013

ARVORES BINRIAS

Impresso em pr-ordem:
8

8,4,2,1,3
12

10

14

11

13

15
21

ARVORES BINRIAS

Impresso em pr-ordem:
8

8,4,2,1,3,6
12

10

14

11

13

15
22

11

19/02/2013

ARVORES BINRIAS

Impresso em pr-ordem:
8

8,4,2,1,3,6,5
12

10

14

11

13

15
23

ARVORES BINRIAS

Impresso em pr-ordem:
8

8,4,2,1,3,6,5,7
12

10

14

11

13

15
24

12

19/02/2013

ARVORES BINRIAS

Impresso em pr-ordem:
8

8,4,2,1,3,6,5,7, 12
12

10

14

11

13

15
25

ARVORES BINRIAS

Impresso em pr-ordem:
8

8,4,2,1,3,6,5,7, 12,10
12

10

14

11

13

15
26

13

19/02/2013

ARVORES BINRIAS

Impresso em pr-ordem:
8

8,4,2,1,3,6,5,7, 12,10,9
12

10

14

11

13

15
27

ARVORES BINRIAS

Impresso em pr-ordem:
8

8,4,2,1,3,6,5,7, 12,10,9,11
12

10

14

11

13

15
28

14

19/02/2013

ARVORES BINRIAS

Impresso em pr-ordem:
8

8,4,2,1,3,6,5,7, 12,10,9,11,14
12

10

14

11

13

15
29

ARVORES BINRIAS

Impresso em pr-ordem:
8

8,4,2,1,3,6,5,7, 12,10,9,11,14,13
12

10

14

11

13

15
30

15

19/02/2013

EXERCCIO

Qual a sada do caminhamento em pr ordem da rvore binria a seguir?

31

ARVORES BINRIAS

Impresso em ordem simtrica (E,R,D):


8

1,2,3,4,5,6,7,8,9 10,11,12,13,14,15
12

10

14

11

13

15

32

16

19/02/2013

EXERCCIO

Qual a sada do percurso em ordem da rvore binria a seguir?

33

ARVORES BINRIAS

Impresso em ps-ordem (E,D,R):


8

1,3,2,5,7,6,4,9,11,10 13,15,14,12,8
12

10

14

11

13

15

34

17

19/02/2013

EXERCCIO

Qual a sada do caminhamento em ps ordem da rvore binria a seguir?

35

RVORE BINRIA (IMPLEMENTAO)


De

que composta uma rvore binria? Como implementar uma rvore binria?

36

18

19/02/2013

RVORE BINRIA (IMPLEMENTAO)


De

que composta uma rvore binria? Como implementar uma rvore binria?
public class BTNode<T> { protected T data; protected BTNode<T> left; protected BTNode<T> right; protected BTNode<T> parent; public boolean isEmpty(){ return this.data == null; }
37

//getters, setters, equals, toString }

RVORE BINRIA (IMPLEMENTAO)


De

que composta uma rvore binria? Como implementar uma rvore binria?
public interface BT<T> { public BTNode<T> getRoot(); public boolean isEmpty(); public int height(); public BTNode<T> search(T elem); public void insert(T value); public void remove(T key); public T[] preOrder(); public T[] order(); public T[] postOrder(); public int size(); }

38

19

19/02/2013

RVORE BINRIA (IMPLEMENTAO)

Como representar uma rvore vazia?


null

data = null null null

O construtor default de BTNode j gera uma rvore vazia?


39

RVORE BINRIA (IMPLEMENTAO)

Como representar uma rvore vazia?


null

O n sentilena de uma rvore binria no contem dados

data = null null null

= NIL

O construtor default de BTNode j gera uma rvore vazia?


40

20

19/02/2013

RVORE BINRIA (IMPLEMENTAO)

Como representar uma rvore contendo apenas um n?


null folha null folha

data

data

null null null null

null null

NIL

NIL

41

RVORE BINRIA DE BUSCA

rvore binria de busca ou rvore binria de pesquisa uma rvore binria onde todos os ns armazenam dados comparveis

todos ns da sub-rvore esquerda contm valores menores do que o n raiz todos os ns da subrvore direita contm valores maiores do que o n raiz.
x

<x

>x
42

A principal utilizao de rvores binrias so as rvores binria de busca

21

19/02/2013

EXEMPLO

2 Subrvores

< < >

> >

O quanto isso reduz o espao da busca a cada passo?


43

RVORE BINRIA DE BUSCA (IMPLEMENTAO)


Uma

BST uma BT? Como implementar isso em Java?

44

22

19/02/2013

RVORE BINRIA DE BUSCA (IMPLEMENTAO)


Uma

BST uma BT? Como implementar isso em Java?


public class BSTNode<T extends Comparable<T>> extends BTNode<T> {

45

RVORE BINRIA DE BUSCA (IMPLEMENTAO)


Uma

BST uma BT? Como implementar isso em Java?


public interface BST<T extends Comparable<T>> extends BT<T> {

public BTNode<T> maximum(); public BTNode<T> minimum(); public BTNode<T> successor(BTNode<T> node); public BTNode<T> predecessor(BTNode<T> node);
}
46

23

19/02/2013

PESQUISA BINRIA
Como

saber se um dado/valor/chave est na rvore?


Se o n no-vazio

Verifica se o dado do n igual chave dada Se nao for Se a chave dada for menor que o dado do n, pesquisa na sub-rvore a esquerda Senao pesquise na sub-rvore a direita

47

PESQUISA BINRIA (IMPLEMENTACAO)

Qual o custo dos algoritmos?


48

24

19/02/2013

RVORE DESBALANCEADA

O que ocorre com a pesquisa binria se a rvore estiver desbalanceada?


x

42

<x

88
94 95

>x

49

RVORE DESBALANCEADA

O que ocorre com a pesquisa binria se a rvore estiver desbalanceada?


x

42 88 94 95

<x

O(n)

>x

Soluo: Outras rvores, como AVL, que veremos depois.


50

25

19/02/2013

MINIMUM
Como

buscar o elemento mnimo de uma

BST?

Descer pela esquerda at que um NIL seja encontrado

51

MAXIMUM
Como

buscar o elemento mximo de uma

BST?

Descer pela direita at que um NIL seja encontrado

52

26

19/02/2013

SUCESSOR
Como

buscar o sucessor de um elemento em uma BST?


Sucessor a menor das chaves maiores (menor descendente a direita)

53

SUCESSOR
Como

buscar o sucessor de um elemento em uma BST?


Sucessor a menor das chaves maiores (primeiro ascendente maior)

54

27

19/02/2013

PREDECESSOR
Como

buscar o predecessor de um elemento em uma BST?


Predecessor a maior das chaves menores (maior descendente a esquerda). Simtrico ao sucessor

Tree-Predecessor(x) if left[x] != NIL then return Tree-Maximum(left[x]) y = p[x] while y != NIL and x = left[y] do x = y y = p[y] return y

55

PREDECESSOR
Como

buscar o predecessor de um elemento em uma BST?


Predecessor a maior das chaves menores (primeiro ascendente maior). Simtrico ao sucessor

Tree-Predecessor(x) if left[x] != NIL then return Tree-Maximum(left[x]) y = p[x] while y != NIL and x = left[y] do x = y y = p[y] return y

56

28

19/02/2013

RVORE BINRIA (INSERO)

Acontece pela raiz (admitir elementos diferentes)


Processar apenas chaves diferentes da raiz Se a chave for menor, insere no filho a esquerda Se a chave for maior insere no filho a direita Insercao sempre acontece em uma nova folha

57

EXERCCIO 1

Insira as chaves 46, 47, 44, 45

58

29

19/02/2013

EXERCCIO 1

Insira as chaves 46, 47, 44, 45

46

59

EXERCCIO 1

Insira as chaves 46, 47, 44, 45

46

47 60

30

19/02/2013

EXERCCIO 1

Insira as chaves 46, 47, 44, 45

46

44

47 61

EXERCCIO 1

Insira as chaves 46, 47, 44, 45

46

44

47 62

45

31

19/02/2013

RVORE BINRIA (INSERCAO)

O procedimento recebe um n mas poderia receber V

x guarda o n onde inserir e y guarda o pai


63

RVORE BINRIA (INSERCAO)

O procedimento recebe um n mas poderia receber V

Para que serve?

64

32

19/02/2013

RVORE BINRIA (INSERCAO)

O procedimento recebe um n mas poderia receber V

Se a arvore inicialmente vazia ou entao adiciona z como filho correto de y


65

RVORE BINRIA (INSERCAO)

O que o mtodo a seguir faz?


XYZ(BSTNode node, T element){ if(node=NIL){ node.data = element node.left = NIL node.right = NIL }else{ if(element< node.data){ XYZ(node.left, element) }else if (element > node.data){ XYZ(node.right, element) } } }

66

33

19/02/2013

ARVORES BINRIAS (REMOCAO)

Remocoes em arvores binarias:


Se o n y (a ser removido) for uma folha entao remova-o. Se o n y tem apenas um filho, ento ligamos o pai de y ao filho de y Se tem dois filhos ento traz o sucessor de y para o lugar dele e remove o sucessor
12 12

10

14

10

15

11

13

15

11

13

67

RVORE BINRIA (REMOO)


tem ao maximo 1 filho

68

34

19/02/2013

RVORE BINRIA (REMOO)

Tem 2 filhos

69

RVORE BINRIA (REMOO)

Guarda o filho a direita ou a esquerda

70

35

19/02/2013

RVORE BINRIA (REMOO)

Conecta o filho ao pai de y

71

RVORE BINRIA (REMOO)

Se y root entao x novo root

72

36

19/02/2013

RVORE BINRIA (REMOO)

Senao seta x sendo o filho correto do pai de y

73

RVORE BINRIA (REMOO)

Se o sucessor de z foi um n diferente entao copia o conteudo dele para z.

74

37

19/02/2013

ARVORES BINRIAS (REMOCAO)

Outras abordagens trabalham da seguinte forma:


Se for folha remove Senao sobe o menor descendente a direita (sucessor) Se nao existir menor descendente a direita ento sobe o maior descendente a esquerda (predecessor) Remove recursivamente o n movido.

75

ARVORES BINRIAS (REMOCAO)


remover 20

76

38

19/02/2013

ARVORES BINRIAS (REMOCAO)

77

ARVORES BINRIAS (REMOCAO)


remover 30

78

39

19/02/2013

ARVORES BINRIAS (REMOCAO)


remover 30
40

79

ARVORES BINRIAS (REMOCAO)


remover 50
40

80

40

19/02/2013

ARVORES BINRIAS (REMOCAO)


90 40

remover 90

81

ARVORES BINRIAS (REMOCAO)


90 40
100

82

41

19/02/2013

XYZ(value) { BSTNode node = search(value) if(node != NIL){ O if(node is leaf){ RVORE INRIA EMOCAO node = NIL }else if (node has one child){ if node != root if(node is left child){ if(node.left != NIL) node.left is left child of node.parent else node.right is left child of node.parent else //node is right child if(node.left != NIL) node.left is right child of parent else node.right is right child of parent else root = not NIL child of root }else{ BSTNode sucessor = sucessor(node); node.value = sucessor.value; XYZ(sucessor); } } }

(R

que o metodo faz?

83

RVORE BINRIA (PERCURSO)

Algoritmo do percurso em pre-ordem


8

12

10

14

11

13

15
84

Como seria o algoritmo?

42

19/02/2013

RVORE BINRIA (PERCURSO)

Algoritmo do percurso em pre-ordem

preOrder(BSTNode node){ if(node != NIL){ visit(node); preOrder(node.left); preOrder(node.right); } } visit(BSTNode){ print(node.key); }

Poderia fazer qualquer outro processamento


85

RVORE BINRIA (PERCURSO)

Algoritmo do percurso em ordem


8

12

10

14

11

13

15
86

Como seria o algoritmo?

43

19/02/2013

RVORE BINRIA (PERCURSO)

Algoritmo do percurso em ordem

order(BSTNode node){ if(node != NIL){ order(node.left); visit(node); order(node.right); } }

87

RVORE BINRIA (PERCURSO)

Algoritmo do percurso em ps-ordem


8

12

10

14

11

13

15
88

Como seria o algoritmo?

44

19/02/2013

RVORE BINRIA (PERCURSO)

Algoritmo do percurso em ps-ordem

postOrder(BSTNode node){ if(node != NIL){ postOrder(node.left); postOrder(node.right); visit(node); } }

89

RVORE BINRIA

Como seria para calcular recursivamente o tamanho (quantidade de elementos) de uma rvore binria
size(root) = 1 + size(left) + size(right) 1 size size

90

45

19/02/2013

RVORE BINRIA

Como seria para calcular recursivamente o tamanho (quantidade de elementos) de uma rvore binria
int size(){ return size(root) } int size(BSTNode node){ if(node.isEmpty) return 0 else return 1 + size(node.left) + size(node.right) }
91

POSCOMP 2009

Nao necessariamente balanceada!

92

46

19/02/2013

POSCOMP 2009

93

POSCOMP 2009

94

47

19/02/2013

POSCOMP 2009

95

REFERNCIAS

Captulo 13

96

48