Escolar Documentos
Profissional Documentos
Cultura Documentos
Arvore Binaria de Busca (BST) PDF
Arvore Binaria de Busca (BST) PDF
ESTRUTURAS DE DADOS E
ALGORITMOS
RVORE BINRIA
1 Adalberto Cajueiro
Departamento de Sistemas e Computao
Universidade Federal de Campina Grande
RVORE (EXEMPLO)
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
7
4 6
3 2 11
EXERCCIO
A rvore a seguir estritamente binria?
Justifique.
12
6
19/02/2013
7
19/02/2013
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
36
18
19/02/2013
19
19/02/2013
data = null
null null
39
40
20
19/02/2013
null null
folha folha
data data
NIL NIL
null null
<x >x
21
19/02/2013
EXEMPLO
43
44
22
19/02/2013
45
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,
47
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
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
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
63
64
32
19/02/2013
Se a arvore inicialmente
vazia ou entao adiciona z
como filho correto de y
65
33
19/02/2013
10 14 10 15
9 11 13 15 9 11 13 67
68
34
19/02/2013
Tem 2 filhos
69
70
35
19/02/2013
71
72
36
19/02/2013
73
Se o sucessor de z foi um
n diferente entao copia
o conteudo dele para z.
74
37
19/02/2013
75
remover 20
76
38
19/02/2013
77
remover 30
78
39
19/02/2013
remover 30
40
79
remover 50
40
80
40
19/02/2013
90
remover 90
40
81
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
}
}
4 12
2 6 10 14
1 3 5 7 9 11 13 15
84
Como seria o algoritmo?
42
19/02/2013
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
4 12
2 6 10 14
1 3 5 7 9 11 13 15
86
Como seria o algoritmo?
43
19/02/2013
order(BSTNode node){
if(node != NIL){
order(node.left);
visit(node);
order(node.right);
}
}
87
4 12
2 6 10 14
1 3 5 7 9 11 13 15
88
Como seria o algoritmo?
44
19/02/2013
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)
}
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