Você está na página 1de 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

1
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

RVORE (ILUSTRACAO)

raiz root
raiz

...

2
19/02/2013

RVORE (ILUSTRACAO)

raiz

...
folha (leaf)

RVORE

raiz
6

Nvel 0

Nvel 1

... Nvel k

Nvel k + 1

Altura = k+1

3
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
8

4
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

5
19/02/2013

RVORES ESTRITAMENTE BINRIAS


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

7
4 6

Desenhe diversas arvores 9 1


e tente deduzir.

3 2 11

EXERCCIO
A rvore a seguir estritamente binria?
Justifique.

12

6
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


h 2h 2h+1 - 1

7
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
Em-ordem (simtrica) (ESQ, RAIZ, DIR)
Percorre sub-rvore esquerda em ordem simtrica
Visita raiz
Percorre sub-rvore direita em ordem simtrica
Ps-ordem (ESQ, DIR, RAIZ)
Percorre sub-rvore esquerda em ps-ordem
Percorre sub-rvore direita em ps-ordem
Visita raiz
Applet: 15
http://www.cosc.canterbury.ac.nz/mukundan/dsal/BTree.html

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

4 12

2 6 10 14

1 3 5 7 9 11 13 15

16

8
19/02/2013

ARVORES BINRIAS
Impresso em pr-ordem:

8 8

4 12

2 6 10 14

1 3 5 7 9 11 13 15

17

ARVORES BINRIAS
Impresso em pr-ordem:

8 8,4

4 12

2 6 10 14

1 3 5 7 9 11 13 15

18

9
19/02/2013

ARVORES BINRIAS
Impresso em pr-ordem:

8 8,4,2

4 12

2 6 10 14

1 3 5 7 9 11 13 15

19

ARVORES BINRIAS
Impresso em pr-ordem:

8 8,4,2,1

4 12

2 6 10 14

1 3 5 7 9 11 13 15

20

10
19/02/2013

ARVORES BINRIAS
Impresso em pr-ordem:

8 8,4,2,1,3

4 12

2 6 10 14

1 3 5 7 9 11 13 15

21

ARVORES BINRIAS
Impresso em pr-ordem:

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

4 12

2 6 10 14

1 3 5 7 9 11 13 15

22

11
19/02/2013

ARVORES BINRIAS
Impresso em pr-ordem:

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

4 12

2 6 10 14

1 3 5 7 9 11 13 15

23

ARVORES BINRIAS
Impresso em pr-ordem:

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

4 12

2 6 10 14

1 3 5 7 9 11 13 15

24

12
19/02/2013

ARVORES BINRIAS
Impresso em pr-ordem:

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

2 6 10 14

1 3 5 7 9 11 13 15

25

ARVORES BINRIAS
Impresso em pr-ordem:

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

2 6 10 14

1 3 5 7 9 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
4 12

2 6 10 14

1 3 5 7 9 11 13 15

27

ARVORES BINRIAS
Impresso em pr-ordem:

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

2 6 10 14

1 3 5 7 9 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
4 12

2 6 10 14

1 3 5 7 9 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
4 12

2 6 10 14

1 3 5 7 9 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
4 12

2 6 10 14

1 3 5 7 9 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
4 12

2 6 10 14

1 3 5 7 9 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)


Deque composta uma rvore binria?
Como implementar uma rvore binria?

36

18
19/02/2013

RVORE BINRIA (IMPLEMENTAO)


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


Deque 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();
38
public int size();
}

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? O n sentilena de
uma rvore
null binria no
contem dados

data = null = NIL


null null

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 null

folha folha
data data

NIL NIL
null null

null null null null


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

A principal utilizao de rvores binrias so as


42
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 >x

94

49
95

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

x
42 <x

88
O(n) >x

94 Soluo: Outras rvores, como


AVL, que veremos depois.
50
95

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
Comobuscar o sucessor de um elemento
em uma BST?
Sucessor a menor das chaves maiores (menor
descendente a direita)

53

SUCESSOR
Comobuscar 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]
55
return y

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]
56
return y

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

9 11 13 15 9 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
remover 90
40

81

ARVORES BINRIAS (REMOCAO)

90

40 100

82

41
19/02/2013

XYZ(value) {
BSTNode node = search(value)
if(node != NIL){
O que o metodo faz?
B
if(node is leaf){
RVOREnode = NIL
INRIA (R EMOCAO )
}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);
} 83
}
}

RVORE BINRIA (PERCURSO)


Algoritmo do percurso em pre-ordem

4 12

2 6 10 14

1 3 5 7 9 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){
Poderia fazer qualquer outro
print(node.key); processamento
}

85

RVORE BINRIA (PERCURSO)


Algoritmo do percurso em ordem

4 12

2 6 10 14

1 3 5 7 9 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

4 12

2 6 10 14

1 3 5 7 9 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)

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

Nao
necessariamente
POSCOMP 2009 balanceada!

92

46
19/02/2013

POSCOMP 2009

93

POSCOMP 2009

94

47
19/02/2013

POSCOMP 2009

95

REFERNCIAS
Captulo 13

96

48

Você também pode gostar