Professional Documents
Culture Documents
Roteiro
Introduo
rvores
Terminologia bsica
Estrutura de Dados - rvore
rvore Binria
rvore Binria de Pesquisa ou de Busca
Operaes em rvore Binria de Busca
rvore Binria de Pesquisa Balanceada
rvore de Pesquisas Generalizadas
12/16/15
rvores Binrias
Introduo - rvores
Uma das mais importantes estruturas de dados
em computao
Por causa da sua organizao hierrquica, muitas
12/16/15
rvores Binrias
rvores Binrias
folha
Uma rvore cuja raiz um nodo interno i chamada de sub-
seus nodos
12/16/15
rvores Binrias
12/16/15
rvores Binrias
RVORE BINRIA
12/16/15
rvores Binrias
rvore Binria
Caracterstica
rvore onde cada nodo no folha possui um
12/16/15
rvores Binrias
rvores Binrias
12/16/15
rvores Binrias
10
rvore Binria
rvore Estritamente Binria
uma rvore binria em que cada n tem 0(zero) ou
2(dois) filhos
Ns com 2
filhos
12/16/15
N sem
filhos
rvores Binrias
11
rvore Binria
rvore Binria Cheia
uma rvore em que se um n tem alguma
Ns com
sub-rvores
vazias
12/16/15
ltimo
nvel
rvores Binrias
12
rvore Binria
rvore Binria Completa
aquela rvore binria em se n um n com
Ns com
sub-rvores
vazias
Penltim
o nvel
12/16/15
rvores Binrias
ltimo
nvel
13
rvore Binria
12/16/15
rvores Binrias
14
RVORE BINRIA DE
BUSCA
OU DE PESQUISA
12/16/15
rvores Binrias
15
12/16/15
rvores Binrias
16
Subrvore
Esquerda
12/16/15
<=
x
rvores Binrias
>
x
chave
x
Subrvore
Direita
17
Percorrer ou Caminhar
Percorrer visitar cada nodo que foi inserido na
12/16/15
rvores Binrias
18
pesquisa
Remover
Remover um nodo da rvore binria de pesquisa
Consultar
Encontrar um nodo na rvore binria de pesquisa
12/16/15
rvores Binrias
19
12/16/15
rvores Binrias
20
imprimeArvorePreOrdem(no raiz)
Incio
Se (raiz != nulo) ento
escreva(raiz->chave);
imprimeArvorePreOrdem(raiz->esq);
imprimeArvorePreOrdem(raiz->dir);
Fim_se
Fim
12/16/15
rvores Binrias
21
imprimeArvoreCentral(no raiz)
Incio
Se (raiz != nulo) ento
imprimeArvoreCentral (raiz->esq);
escreva(raiz->chave);
imprimeArvoreCentral (raiz->dir);
Fim_se
Fim
12/16/15
rvores Binrias
22
imprimeArvorePosOrdem(no raiz)
Incio
Se (raiz != nulo) ento
imprimeArvorePosOrdem (raiz->esq);
imprimeArvorePosOrdem (raiz->dir);
escreva(raiz->chave);
Fim_se
Fim
12/16/15
rvores Binrias
23
1
7
7
12/16/15
7
7
4
3
1
1
47-25-11-7
17-43-31-44
77-65-68-93
3
1
6
5
4
4
rvores Binrias
9
3
6
8
24
1
7
7
12/16/15
7
7
4
3
1
1
7- 11-17-25
31-43-44-47
65-68-77-93
3
1
6
5
4
4
rvores Binrias
9
3
6
8
25
1
7
7
12/16/15
7
7
4
3
1
1
7- 17-11-31
44-43-25-68
65-93-77-47
3
1
6
5
4
4
rvores Binrias
9
3
6
8
26
rvores Binrias
27
rvores Binrias
28
Aplicao: Expresso
Uma aplicao bastante corriqueira de rvores binrias na
b
12/16/15
a
c
rvores Binrias
+
e
g
29
Aplicao: Expresso
Algoritmo: Avalia(Arvore T)
Var
operando_1, operando_2 : char
Incio
Se T^.Val uma constante ou varivel ento
retornar o valor da arvore T
Seno
operando_1 Avalia(T^.Esq)
operando_2 Avalia(T^.Dir)
Se T^.Val = + ento retornar operando_1 +
operando_2
Seno Se T^.Val = - ento retornar
operando_1 - operando_2
Seno Se T^.Val = * ento retornar
operando_1 *operando_2
Seno Se T^.Val = / ento retornar
operando_1 /operando_2
Fim_se
12/16/15
rvores Binrias
Fim_se
30
(b/c * a) + ((d-e) /
Aplicao: Expresso
(f+g))
+
b/c *
a
12/16/15
b/c
(d-e) /
(f+g)
a
c
rvores Binrias
d
de
+
e
g
f+
g
31
vazio
Representao Grfica
Linguagem C
no
nodo no = NULL;
struc
t
12/16/15
rvores Binrias
32
12/16/15
rvores Binrias
33
rvores Binrias
34
50
raiz criaNodo(valor);
Seno Se (valor <= raiz->chave) ento
insereNodo(raiz->esq, valor);
Seno Se (valor > raiz->chave) ento
insereNodo(raiz->dir, valor);
20
70
Fim_se
Fim
12/16/15
rvores Binrias
35
Exerccios em Sala
Insira os seguintes nodos em uma rvore
binria de pesquisa cheia
Nodos: 49-28-83-18-40-71-97-69-72-92-9944-32-11-19
Resposta
12/16/15
rvores Binrias
36
complexo.
Para excluir um n de uma rvore binria de
busca, h de se considerar trs casos distintos
para a excluso:
Excluso na folha
Excluso de um n com um filho
Excluso de um n com dois filhos
12/16/15
rvores Binrias
37
remov-lo da rvore
12/16/15
rvores Binrias
38
12/16/15
rvores Binrias
39
diferentes.
Pode-se substituir o valor do n a ser retirado
pelo valor sucessor (o n mais esquerda da
sub-rvore direita)
Pode-se substituir o valor do n a ser retirado
pelo valor antecessor (o n mais direita da
sub-rvore esquerda)
Em seguida se remove o nodo antecessor ou
sucessor
12/16/15
rvores Binrias
40
12/16/15
rvores Binrias
41
12/16/15
rvores Binrias
42
12/16/15
rvores Binrias
43
12/16/15
rvores Binrias
44
12/16/15
rvores Binrias
45
Exerccios em Sala
1. Remova o nodo de nmero 13 da rvore abaixo:
1
5
1
6
5
1
2
3
1
0
2
0
1
3
1
8
2
3
6
7
12/16/15
rvores Binrias
Respost
a
46
Exerccios em Sala
2. Remova o nodo de nmero 16 da rvore abaixo:
1
5
1
6
5
1
2
3
1
0
2
0
1
3
1
8
2
3
6
7
12/16/15
rvores Binrias
Respost
a
47
5
1
2
3
1
0
2
0
1
3
1
8
2
3
6
7
12/16/15
rvores Binrias
Respost
a
48
Implementao em
C
12/16/15
rvores Binrias
49
Implementao
As rvores binrias generalizam a ideia de listas
encadeadas
As rvores binrias de busca generalizam a ideia
12/16/15
rvores Binrias
50
Impresso (Pr-Ordem)
void impressao(no *raiz){
if(raiz){ //arvore existe
printf("%d ",raiz->info);
impressao(raiz->esquerda);
impressao(raiz->direita);
}
}
12/16/15
rvores Binrias
51
12/16/15
rvores Binrias
52
Impresso (Ps-Ordem)
void impressao(no *raiz){
if(raiz){ //arvore existe
impressao(raiz->esquerda);
impressao(raiz->direita);
printf("%d ",raiz->info);
}
}
12/16/15
rvores Binrias
53
Implementao em Linguagem C
Implemente a funo CriaNodo(valor)
Implemente o procedimento para inserir nodos em
insereNodo.
void testeDeInsercao();
Faa o testeDeInsercao() imprimir os nodos
inseridos
void imprimeArvore(no *raiz);
12/16/15
rvores Binrias
54
Implementao BUSCA
no * busca (no *raiz, int valor) {
if (raiz == NULL || raiz->chave == valor)
return raiz;
if (valor <= raiz->chave)
return busca (raiz->esquerda, valor);
else return busca (raiz->direita, valor);
}
12/16/15
rvores Binrias
55
Implementao REMOO
void removeNodo(no *nodo){
if(nodo->esq==NULL && nodo->dir==NULL)
exclusaoFolha(nodo);
else if(nodo->esq==NULL || nodo->dir==NULL)
exclusaoNoComFilhoUnico(nodo);
else exclusaoNoComDoisFilhos(nodo);
}
12/16/15
rvores Binrias
56
Exerccios em Laboratrio
Escreva uma funo que decida se uma dada
12/16/15
rvores Binrias
57