Você está na página 1de 57

rvores Binrias

Kelen Acquati Vieira, M.Sc.

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

aplicaes so realizadas ...


Usando algoritmos simples
Recursivos
E de eficincia bastante razovel

12/16/15

rvores Binrias

Introduo Terminologia Bsica


Define-se uma rvore A como sendo:
Um conjunto finito de elementos
Esses elementos so chamados de nodos ou vrtices

Grau o nmero de sub-rvores de um n


Uma rvore vazia se, ou seja, se rvore no tem nodos
Cada nodo n da rvore est associado a um nodo p

chamado pai de n. Logo n um filho de p


Existe um nodo especial da rvore que o nico que no

tem pai, nodo raiz da rvore


12/16/15

rvores Binrias

Introduo Terminologia Bsica


Raiz o nico nodo da rvore que no tem pai
Folha todo nodo que no tem filhos
Um nodo dito interno se no nem uma raiz e nem uma

folha
Uma rvore cuja raiz um nodo interno i chamada de sub-

rvore de i, ou simplesmente sub-rvore


Nvel de um nodo igual ao nmero de nodos existentes

entre a raiz e este nodo, incluindo o prprio nodo


A altura h(A) de uma rvore A igual ao maior nvel dentre

seus nodos
12/16/15

rvores Binrias

Introduo Estrutura de Dados


rvore
Nodo, n
ou vrtice

12/16/15

rvores Binrias

RVORE BINRIA

12/16/15

rvores Binrias

rvore Binria
Caracterstica
rvore onde cada nodo no folha possui um

ou dois filhos, ou seja, grau mximo 2


Em geral, chamamos os filhos de filho
esquerdo e filho direito
Da mesma forma, identificamos as subrvores esquerda e direita de um certo nodo

12/16/15

rvores Binrias

Introduo Estrutura de Dados


rvore
typedef struct nodo{
int chave;
struct nodo *esq;
struct nodo *dir;
}no;

Ponteiro Esquerdo Ponteiro Direito


12/16/15

rvores Binrias

Introduo Estrutura de Dados


rvore
Raiz
Ns
Internos
Folha
s

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

sub-rvore vazia ento ele est no ltimo


nvel

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

alguma sub-rvore vazia, ento n se localiza


no penltimo OU no ltimo nvel

Ns com
sub-rvores
vazias
Penltim
o nvel

12/16/15

rvores Binrias

ltimo
nvel

13

rvore Binria

Toda rvore Cheia Completa


e Estritamente Binria

12/16/15

rvores Binrias

14

RVORE BINRIA DE
BUSCA
OU DE PESQUISA

12/16/15

rvores Binrias

15

rvore Binria de Pesquisa ou de


Busca
Caracterstica
Essa rvore DEVE ou SER SEMPRE ordenada,

mesmo que ocorra inseres ou remoes de


valores, isto deve ser feito de tal forma que a
rvore binria de busca continue ORDENADA

12/16/15

rvores Binrias

16

rvore Binria de Pesquisa ou de


Busca
Numa rvore binria de busca, todos os ns na sub-rvore

esquerda de um n contendo uma chave x so


menores ou iguais que x e todos os ns da subrvore direita so maiores que x
x

Subrvore
Esquerda
12/16/15

<=
x
rvores Binrias

>
x

chave
x

Subrvore
Direita
17

Operaes sobre uma rvore


Binria de Busca
Inicializar
Fazer uma nova rvore binria de pesquisa

apontar para um valor nulo


Criar nodo
Instancia um novo nodo (malloc)

Percorrer ou Caminhar
Percorrer visitar cada nodo que foi inserido na

rvore binria de busca

12/16/15

rvores Binrias

18

Operaes sobre uma rvore


Binria de Busca
Inserir
Inserir um novo nodo na rvore binria de

pesquisa
Remover
Remover um nodo da rvore binria de pesquisa

Consultar
Encontrar um nodo na rvore binria de pesquisa

cuja chave um argumento procurado, e depois


retornar o nodo correspondente

12/16/15

rvores Binrias

19

Operaes sobre uma rvore


Binria de Busca
Operaes de Caminhamento ou Percorrimento
Pr-fixado ou Pr-ordem
Processa-se

a raiz, a sub-rvore esquerda e ento a


sub-rvore direita
Central ou in-fixado ou in-ordem
Processa-se a sub-rvore esquerda, a raiz e ento a
sub-rvore direita
Ps-fixado ou Ps-ordem
Processa-se a sub-rvore esquerda, sub-rvore direita
e raiz

12/16/15

rvores Binrias

20

Operaes sobre uma rvore


Binria de Busca
Pr-Ordem

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

Operaes sobre uma rvore


Binria de Busca
In-Ordem - Central

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

Operaes sobre uma rvore


Binria de Busca
Ps-Ordem

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

Operaes sobre uma rvore


Binria de Pesquisa
Consultar: Caminhamento Pr-Ordem
4
7
2
5

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

Operaes sobre uma rvore


Binria de Pesquisa
Consultar: Caminhamento Central
4
7
2
5

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

Operaes sobre uma rvore


Binria de Pesquisa
Consultar: Caminhamento Ps-Ordem
4
7
2
5

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

Exerccio em Sala de Aula


6) 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
R= 49-28-18-11-19-40-32-44-83-71-69-72-97-92-99
7) Imprima o resultado
do caminhamento em PrOrdem dos nodos dados no exerccio 1)
8) Imprima o resultado
do caminhamento em InR= 11-18-19-28-32-40-44-49-69-71-72-83-92-97-99
Ordem dos nodos dados no exerccio 1)
9) Imprima o resultado do caminhamento em PsR= 11-19-18-32-44-40-28-69-72-71-92-99-97-83-49
Ordem do nodos
dados no exerccio 1)
12/16/15

rvores Binrias

27

Exerccio em Sala de Aula


6) Insira os seguintes nodos em uma rvore
binria de pesquisa cheia
Nodos: 50, 30, 70, 20, 40, 60, 80, 15, 25, 35, 45,
36
Resposta
R= 50-30-20-15-25-40-35-36-45-70-60-80
7) Imprima o resultado
do caminhamento em PrOrdem dos nodos dados no exerccio 1)
8) Imprima o resultado
do caminhamento em InR= 15-20-25-30-35-36-40-45-50-60-70-80
Ordem dos nodos dados no exerccio 1)
9) Imprima o resultado do caminhamento em PsR= 15-25-20-36-35-45-40-30-60-80-70-50
Ordem do nodos
dados no exerccio 1)
12/16/15

rvores Binrias

28

Aplicao: Expresso
Uma aplicao bastante corriqueira de rvores binrias na

representao e processamento de expresses algbricas ,


booleanas , etc. Ex: ( ( (b/c) * a ) + ( (d-e)/(f+g)) )

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

Operaes sobre uma rvore


Binria de Busca
Inicializar
Inicializar fazer inicialmente o Nodo Raiz ser

vazio
Representao Grfica

Linguagem C

no

nodo no = NULL;
struc
t
12/16/15

rvores Binrias

32

Operaes sobre uma rvore


Binria de Busca
Cria Nodo
no * criaNodo(int ch){
nodo *p = (no*) malloc(sizeof(no));
p->chave = ch;
p->esq = NULL;
p->dir = NULL;
Retorna p;
}

12/16/15

rvores Binrias

33

Operaes sobre uma rvore


Binria de Busca
Insero
A insero comea com uma busca, verificando

a raiz da sub-rvore, se a mesma maior ,


igual ou menor do que o elemento a ser
inserido
Ser inserido na folha da raiz da sub-rvore
esquerda, se o valor do novo n for menor ou
igual do que o dessa raiz
Ser inserido na folha da raiz da sub-rvore
direita, se o valor do novo n for maior do que o
dessa raiz
12/16/15

rvores Binrias

34

Operaes sobre uma rvore


Binria de Busca
Algoritmo: insereNodo (raiz : no, valor : inteiro)
Incio
Se (raiz = nulo) ento

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

Operaes sobre uma rvore


Binria de Busca
Remoo
A excluso de um n um processo mais

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

Operaes sobre uma rvore


Binria de Busca
Excluso na Folha
A excluso na folha a mais simples, basta

remov-lo da rvore

12/16/15

rvores Binrias

38

Operaes sobre uma rvore


Binria de Busca
Excluso de um nodo com um filho
Excluindo-o, o filho sobe para a posio do pai

12/16/15

rvores Binrias

39

Operaes sobre uma rvore


Binria de Busca
Excluso de um n com dois filhos
Neste caso, pode-se operar de duas maneiras

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

Operaes sobre uma rvore


Binria de Busca
O n de valor 30 est para ser removido, e possui como

sucessor imediato o valor 40 e como antecessor imediato do


40 o valor 35. Assim sendo, na excluso, o filho do 35 ser
promovido no lugar do n a ser excludo, enquanto o 40
continuar no mesmo lugar, como pode ser visto na figura.

12/16/15

rvores Binrias

41

Exerccios em Sala de Aula


Suponha que as chaves 9, 12, 5, 3, 7, 14, 10, 2, 6,

8, 13, 15, 11, 1, 4 so inseridas, nesta ordem,


numa rvore binria de busca inicialmente vazia.
Desenhe a rvore que resulta. Em seguida remova
os seguintes nodos: 12, 9, 1, 13, 5, 4, 2, 10, 6, 8,
3, 15, 14 e 7

12/16/15

rvores Binrias

42

Exerccios em Sala de Aula


Suponha que as chaves E, S, T, U, D, A, N, T, E

so inseridas, nesta ordem, numa rvore binria


de busca inicialmente vazia. Desenhe a rvore
que resulta. Em seguida remova os seguintes
nodos: S, T, D, E, T, A, U, E

12/16/15

rvores Binrias

43

Exerccios em Sala de Aula


Suponha que as chaves 50, 30, 70, 20, 40, 60,

80, 15, 25, 35, 45, 36 so inseridas, nesta


ordem, numa rvore de busca inicialmente vazia.
Desenhe a rvore que resulta. Em seguida
remova o n que contm30, 50, 35, 15, 25

12/16/15

rvores Binrias

44

Exerccios em Sala de Aula


Suponha que as chaves A, L, G, O, R, I, T, M , O

so inseridas, nesta ordem, numa rvore binria


de busca inicialmente vazia. Desenhe a rvore
que resulta. Em seguida remova a quantidade de
n necessria para que ao final se tenha uma
rvore binria Completa.

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

Exerccios de Rendimento em Sala


3. Remova o nodo de nmero 5 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

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

de listas encadeadas crescentes

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

Impresso (In-Ordem ou Central)


void impressao(no *raiz){
if(raiz){ //arvore existe
impressao(raiz->esquerda);
printf("%d ",raiz->info);
impressao(raiz->direita);
}
}

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

uma rvore vazia.


void insereNodo (no **raiz, int valor);
Implemente um procedimento para testar o

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

rvore binria ou no de busca

12/16/15

rvores Binrias

57