Vous êtes sur la page 1sur 13

NOTAS DE AULA RVORES

PROFS: FBIO PROTTI E JLIO SILVEIRA 1

1. RVORES

1.1 DEFINIES: Uma rvore um grafo acclico e conexo.


Outras definies todas so equivalentes

i. Uma rvore um grafo conexo e |E| mnimo.


ii. Uma rvore um grafo conexo, e |E| = |V| 1.
iii. Uma rvore um grafo acclico, e |E| = |V| 1.
iv. Uma rvore um grafo acclico, e para todo par de vrtices v, w V, a adio da aresta
(v,w) produz um grafo contendo exatamente um ciclo.

TEOREMA: Um grafo uma rvore se e somente se existir um nico caminho entre cada par de
vrtices de G.

Representao geomtrica

I N
M
G S
H
L
T
R E C
O
D U
A P
K

J
B
F Q

FIGURA 1: REPRESENTAO GEOMTRICA DE UMA RVORE

Estudaremos mais profundamente as rvores enraizadas, que so muito utilizadas como


estruturas de dados.

1.2 RVORE ENRAIZADA:


Uma rvore T uma estrutura de dados que, quando no est vazia, possui um n especial
chamado raiz. A raiz pode ter zero ou mais filhos, que por sua vez so razes de outras rvores
(chamadas de subrvores de T). Veja o exemplo a seguir, que ilustra uma verso enraizada da
rvore da FIGURA 1, tendo o n A como raiz.
NOTAS DE AULA RVORES
PROFS: FBIO PROTTI E JLIO SILVEIRA 2

B C D

E F G H I J

K L M N O P Q

R S T U

FIGURA 2: UMA RVORE ENRAIZADA

Terminologia para rvores enraizadas, exemplificadas a partir da rvore da FIGURA 2

A raiz da rvore o n A.
Os filhos de A so os ns B, C, e D; os filhos de B so E e F; e assim por diante.
Tambm utilizamos o termo pai: o n C pai dos ns G, H e I.
A raiz o nico n que no tem pai.
Ns que sem filhos so chamados folhas. Na rvore acima: K, R, F, G, M, S, T, O, I, U e Q.
Os descendentes de um n X so todos os ns que se encontram na subrvore da qual X o
n raiz. Por exemplo: os ns M, N, O, S e T so todos descendentes do n H.
Os ancestrais de um n X so todos os ns que se encontram no caminho ascendente de vai
de X at a raiz. Por exemplo: os ancestrais de U so os ns P, J, D e A.
Outras nomenclaturas menos usadas: av e neto, tio e sobrinho, irmo e primo.
Propriedades das rvores:

Os caminhos que partem de um n no se encontram mais (do contrrio teramos um ciclo).


Eles apenas se ramificam em novos caminhos at as folhas.

Importantes aplicaes em computao:

 Estrutura de diretrios em um sistema de arquivos.


 Estrutura de bancos de dados eficientes.
 Mecanismos de busca.
 Algoritmos de compactao.
NOTAS DE AULA RVORES
PROFS: FBIO PROTTI E JLIO SILVEIRA 3

Mais terminologia: nvel e altura

O nvel de um n X o nmero de ns que se encontram no caminho descendente que vai da


raiz at o no X (incluindo os ns origem e destino).
A altura de um n X o nmero de ns que se encontram no maior caminho descendente
que vai do n X at uma folha (incluindo os ns origem e destino).
 O nvel do n raiz igual a UM.
 A altura de qualquer folha igual a UM.
 A altura de uma rvore definida como sendo a altura da sua raiz.

N NVEL ALTURA
A 1 5
B 2 4
C 2 4
D 2 4
E 3 3
F 3 1
G 3 1
H 3 3
I 3 1
J 3 3
K 4 1
L 4 2
M 4 1
N 4 2
O 4 1
P 4 2
Q 4 1
R 5 1
S 5 1
T 5 1
U 5 1

EXERCCIOS:
1. Desenhe duas rvores no isomorfas com 10 ns e altura 3.
2. Qual o nmero mximo de ns em uma rvore de altura 4, se cada n possui sempre menos do
que 4 filhos?
3. Qual o nmero mnimo de ns que uma rvore com 5 nveis pode ter?
4. Verdadeiro ou falso? O maior nvel em uma rvore sempre igual altura da raiz.
5. Quantas folhas possui uma rvore com altura k, se cada n interno tem exatamente 2 filhos?
6. Quantos ns possui uma rvore com altura k, se cada n interno tem exatamente 2 filhos?
7. Quantos ns possui uma rvore com altura k, se cada n interno tem exatamente 3 filhos?
8. Quantas folhas possui uma rvore com altura 4, se cada n interno tem exatamente m filhos?
9. Quantos ns e quantas folhas possui uma rvore com altura k, se cada n interno possui
exatamente m filhos?
NOTAS DE AULA RVORES
PROFS: FBIO PROTTI E JLIO SILVEIRA 4

1.3 PERCURSOS EM RVORES ENRAIZADAS


Percurso em pr-ordem

O percurso em pr-ordem pode ser definido de forma recursiva pelo algoritmo a seguir:
PRE_ORDEM(n T)
Se T = nulo ento
Retorne
Visite (T)
Para cada filho F do n T (da esquerda para a direita) faa
PRE_ORDEM(F)

Na rvore da FIGURA 2, a chamada PRE_ORDEM(A), geraria a seguinte sada:


A B E K L R F C G H M N S T O I D J P U Q.

Percurso em ps-ordem

O percurso em ps-ordem pode ser definido de forma recursiva pelo algoritmo a seguir:
POS_ORDEM(n T)
Se T = nulo ento
Retorne
Para cada filho F do n T (da esquerda para a direita) faa
POS_ORDEM(F)
Visite (T)

Na rvore da FIGURA 2, a chamada POS_ORDEM(A), geraria a seguinte sada:


K R L E F B G M S T N O H I C U P Q J D A.

Percurso em ordem de nvel

O percurso em ordem de nvel exibe os ns nvel a nvel, do menor ao maior; percorrendo os


ns de um mesmo nvel da esquerda para a direita.

Na rvore da FIGURA 2, o percurso em ordem de nvel geraria a seguinte sada:


A B C D E F G H I J K L M N O P Q R S T U.

EXERCCIO:

Construa algoritmos no recursivos que implementem todos os trs tipos de percursos em uma
rvore. Utilize vetores que implementem filas e pilhas como soluo para as verses no recursivas.

1.4 ARMAZENAMENTO COMPUTACIONAL DE RVORES ENRAIZADAS


Normalmente limitamos o nmero mximo de filhos que um n pode ter, que forma que
podemos associar a cada n um vetor de ponteiros (de tamanho fixo) para os seus filhos. Em uma
rvore m-ria, cada n tem no mximo m filhos (para um valor fixo m >1).

Casos particulares so as rvores ternrias (cada n tem no mximo 3 filhos) e as rvores


binrias (2 filho no mximo). Neste ltimo caso, normalmente definimos dois ponteiros em vez de
um vetor, como veremos adiante.
NOTAS DE AULA RVORES
PROFS: FBIO PROTTI E JLIO SILVEIRA 5

1.5 RVORES BINRIAS


Uma rvore binria uma rvore onde cada n pode ter no mximo 2 filhos, cada qual
especificado por sua posio: filho esquerdo e filho direito. A FIGURA 3 ilustra um exemplo de
rvore binria.

B D

E G H J

K L N O P

R S T U

FIGURA 3: UMA RVORE BINRIA

Implementao com alocao esttica

Pode-se declarar uma rvore utilizando os seguintes comandos em Pascal:


type
NO = record
INFO: string;
PAI, FESQ, FDIR: integer;
end;
var
T: array[1..100] of NO;
RAIZ: integer;

Observe que no exemplo acima toda a rvore T alocada estaticamente, contendo no mximo
100 nos. Cada n tem quatro campos: a informao relativa ao n, e mais trs campos de ponteiros
para o pai e para os filhos direito e esquerdo. Tais ponteiros so implementados como ndices do
prprio vetor T, e quando um deles no existe, o ponteiro nulo indicado pelo valor ZERO.
Finalmente, a varivel RAIZ armazena o ndice do n raiz da rvore no vetor T.

A tabela a seguir ilustra a estrutura preenchida de acordo com a rvore representada pela
FIGURA 3.
NOTAS DE AULA RVORES
PROFS: FBIO PROTTI E JLIO SILVEIRA 6

RAIZ = 5.

INFO PAI FESQ FDIR


1
2 E 8 4 17
3 P 15 10 0
4 K 2 0 0
5 A 0 8 11
6
7 H 11 12 9
8 B 5 2 13
9 O 7 0 0
10 U 3 0 0
11 D 5 7 15
12 N 7 16 14
13 G 8 0 0
14 T 12 0 0
15 J 11 0 3
16 S 12 0 0
17 L 2 18 0
18 R 17 0 0
19
20

REPRESENTAO GRFICA DOS PONTEIROS (apenas alguns ns)

INFO PAI FESQ FDIR

B
D

Para representar a rvore do exemplo, so necessrios 16 ns e 49 ponteiros (um para apontar


RAIZ, e trs para cada um dos 16 ns). Dos 49 ponteiros, observe que 18 so nulos.
NOTAS DE AULA RVORES
PROFS: FBIO PROTTI E JLIO SILVEIRA 7

Implementao com alocao dinmica

Pode-se declarar uma rvore utilizando os seguintes comandos em Linguagem C:


typedef struct st_no NO;

struct st_no
{
char info;
NO *pai,
*fesq,
*fdir;
}

NO *raiz;

Para armazenar cada n da rvore, deve-se alocar dinamicamente um elemento do tipo NO,
funo esta que retorna seu endereo de memria. Este endereo ser armazenado no campos pai,
fesq, fdir, e tambm na prpria varivel raiz. Este tipo de implementao mais complexa,
embora permita a alocao de ns sob demanda. Como consequncia, temos flexibilidade no
tamanho da rvore (nmero de ns), que limitado apenas pela capacidade de memria disponvel.

1.6 PERCURSOS EM RVORES BINRIAS


Alm dos percursos pr-ordem e ps-ordem, definidos para qualquer rvores enraizada, para
rvores binrias tambm definimos o percurso in-ordem (ou ordem simtrica) visto a seguir.
Percurso em pr-ordem

O percurso em pr-ordem em rvores binrias pode ser definido de forma recursiva pelo
algoritmo a seguir:
PRE_ORDEM(n T)
Se T = nulo ento
Retorne
Visite (T)
PRE_ORDEM(T.ESQ)
PRE_ORDEM(T.DIR)

Na rvore binria da FIGURA 3, a chamada PRE_ORDEM(A), geraria a seguinte sada:


A B E K L R G D H N S T O J P U.
NOTAS DE AULA RVORES
PROFS: FBIO PROTTI E JLIO SILVEIRA 8

Percurso em ps-ordem

O percurso em ps-ordem em rvores binrias pode ser definido de forma recursiva pelo
algoritmo a seguir:
POS_ORDEM(n T)
Se T = nulo ento
Retorne
POS_ORDEM(T.ESQ)
POS_ORDEM(T.DIR)
Visite (T)

Na rvore da FIGURA 2, a chamada POS_ORDEM(A), geraria a seguinte sada:


K R L E G B G M S T N O H U P J D A.

Percurso in-ordem (ordem simtrica)

O percurso in-ordem (ou ordem simtrica) em rvores binrias pode ser definido de forma
recursiva pelo algoritmo a seguir:
IN_ORDEM(n T)
Se T = nulo ento
Retorne
IN_ORDEM(T.ESQ)
Visite (T)
IN_ORDEM(T.DIR)

Na rvore da FIGURA 2, a chamada IN_ORDEM(A), geraria a seguinte sada:


K E R L B G A S N T H O D J U P.

1.7 TIPOS ESPECIAIS DE RVORES BINRIAS


rvore estritamente binria: Todos os ns possuem 0 ou 2 filhos.
NOTAS DE AULA RVORES
PROFS: FBIO PROTTI E JLIO SILVEIRA 9

rvore cheia: Todos os ns internos possuem dois filhos, e todas as folhas encontram-se no
ltimo nvel. Observe que toda rvore cheia estritamente binria.

rvore completa: tambm chamada quase-cheia. Simplificando, uma rvore cheia at o


penltimo nvel.

rvore ziguezague: todos os ns internos possuem exatamente um filho cada um.


NOTAS DE AULA RVORES
PROFS: FBIO PROTTI E JLIO SILVEIRA 10

LEMA: Seja T uma rvore binria com n > 0 ns. O nmero de subrvores vazias (esquerdas e
direitas) em T igual a n + 1.
LEMA: Seja T uma rvore binria completa com n > 0 ns. Ento T possui altura h mnima.
Alm disso, h = 1 + log n . Em outras palavras, no existe rvore binria com n > 0 e
altura menor do que este valor.

1.8 RVORES BINRIAS DE BUSCA

Uma rvore binria de busca possui a seguinte propriedade: para todo n Q, os elementos
que se encontram na subrvore esquerda de Q possuem informao menor que a informao de
Q, e os elementos que se encontram na subrvore direita de Q possuem informao maior que a
informao de Q. Veja o exemplo:

Maria

Eudes Ricardo

Carlos Joana Patrcia Suzana

Ana Horcio Neuza Pedro Z

Glria Nair Osvaldo Tereza

Pesquisa em rvores binrias de busca

Suponha que desejamos saber se certa informao, contida na varivel X, est ou no numa
rvore binria de busca T. A pesquisa de X em T ocorre da seguinte forma: compara-se inicialmente
X com a raiz de T. Se encontramos X na raiz, a pesquisa termina com sucesso. Caso contrrio, h
duas possibilidades:
1. Se X menor que a informao da raiz, ento a pesquisa deve continuar na subrvore
esquerda da raiz
2. Se X maior que a informao da raiz, ento sabemos que a pesquisa deve continuar na
subrvore direita da raiz
A pesquisa continua sucessivamente, at encontrar X (pesquisa com sucesso) ou atingir uma
subrvore vazia de uma folha (pesquisa com fracasso).
NOTAS DE AULA RVORES
PROFS: FBIO PROTTI E JLIO SILVEIRA 11

Algoritmo de Pesquisa (recursivo)

O algoritmo retorna o ndice do n que contm a informao X (em caso de sucesso) ou


retorna zero (em caso de fracasso).
function BUSCA_BINARIA (X: string; RAIZ: integer): integer;
var
I, J: integer;
begin
if RAIZ = nulo then
BUSCA_BINARIA := 0
else
if X = T[RAIZ].INFO then
BUSCA_BINARIA := RAIZ
else
if X < T[RAIZ].INFO then
begin
J := T[RAIZ].FESQ;
I := BUSCA_BINARIA (X, J);
BUSCA_BINARIA :=I
end
else
begin
J := T[RAIZ].FDIR;
I := BUSCA_BINARIA (X, J);
BUSCA_BINARIA := I
end
end;

Insero de um n na rvore binria de busca

A insero de um n com informao X em uma rvore binria de busca T muito simples.


Inicialmente, efetuamos BUSCA_BINARIA(X,RAIZ). Se a busca retornar um valor diferente de zero,
ento X j pertence rvore e neste caso no h nada a fazer. Se a busca retornar zero, ento X
pode ser inserido na rvore. A posio de insero obedece seguinte regra:

O novo n ser inserido EXATAMENTE no ponto da rvore


em que BUSCA_BINARIA(X,RAIZ) terminou a pesquisa.

Como exemplo, suponha que queremos inserir na rvore da pgina anterior o n com
informao X = Deise.

Compara-se Deise com Maria, e vamos para a subrvore esquerda.


Depois, compara-se Deise com Eudes, e novamente vamos para a subrvore esquerda.
Agora, comparamos Deise com Carlos, e devemos ir para a subrvore direita de Carlos.
Como ela no existe, BUSCA_BINARIA termina exatamente neste ponto.

Logo, o novo n com informao Deise deve ser criado como filho direito do n contendo
Carlos. Veja como fica a rvore aps a insero do n com informao Deise (alguns ns apenas):
NOTAS DE AULA RVORES
PROFS: FBIO PROTTI E JLIO SILVEIRA 12

Maria

Eudes

Carlos

Ana Deise

Remoo de um n na rvore binria de busca

Ao removermos um n R de uma rvore Binria de Busca, temos dois casos:


CASO 1: o n R uma folha. Neste caso, no h mais nada a fazer.
CASO 2: o n R um n interno. Neste caso, devemos substitu-lo por outro n da rvore
que pode ser escolhido de dois modos:
ou escolhemos o maior n da subrvore esquerda de R;
ou escolhemos o menor n da subrvore direita de R.

Exemplos

Ao remover Nair, nada mais resta a fazer, pois uma folha


Ao remover Ricardo, podemos substitu-lo por Pedro (folha) ou Suzana.
Se formos substitu-lo por Suzana, este ltimo, ao ser removido, ser substitudo por
Tereza (folha), pois no h subrvore esquerda em Suzana.
Ao remover Joana, devemos substitu-lo por Horcio, pois no h subrvore direita em
Joana. Como Horcio tambm foi removido, deve-se recursivamente substitu-lo por
Glria (folha).

EXERCCIOS:
1. Desenhe a NICA rvore binria cujos percursos geraram as sadas abaixo:

Pr-ordem: HTJAEX
Ps-ordem: AJTXEH
Ordem simtrica: J A T H X E

2. Desenhe a rvore binria de busca formada pela insero sucessiva dos ns com as informaes
a seguir (nesta ordem): Juliana, Caio, Pedro, Marcelo, Tas, Ana, Jos, Soraia, Zito, Bete, Deise,
Ricardo.
3. Verdadeiro ou Falso? O formato de uma rvore binria de busca depende da ordem em que os
ns foram inseridos nela.
4. Desenhe uma rvore binria de busca com 5 ns que seja tambm uma rvore ziguezague.
NOTAS DE AULA RVORES
PROFS: FBIO PROTTI E JLIO SILVEIRA 13

5. Desenhe uma rvore binria de busca completa com 12 ns.


Cada n deve conter um nmero entre 50 e 70.
6. Redesenhe a rvore da Questo 4 aps remover a raiz.
7. Redesenhe a rvore da Questo 4 aps a insero de um n com informao 60,5
(sessenta vrgula cinco).

8. Remova a raiz da rvore binria de busca abaixo, SUBSTITUINDO SEU N por um de MAIOR
VALOR. DESENHE APENAS A VERSO FINAL depois de todos os ajustes.

G T

D J R Z

A F M X

9. Desenhe a rvore binria de busca gerada pela incluso dos elementos:

50, 30, 85, 65, 60, 10, 45, 25, 40, 95, 90, inseridos NESTA ORDEM.

10. (ENADE 2011): Suponha que se queira pesquisar a chave 287 em uma rvore binria de busca
com chaves entre 1 e 1 000. Durante uma pesquisa como essa, uma sequncia de chaves
examinada. Cada sequncia abaixo uma suposta sequncia de chaves examinadas em uma
busca da chave 287..

I. 7, 342, 199, 201, 310, 258, 287


II. 110, 132, 133, 156, 289, 288, 287
III. 252, 266, 271, 294, 295, 289, 287
IV. 715, 112, 530, 249, 406, 234, 287

vlido apenas o que se apresenta em

a) I.
b) III.
c) I e II.
d) II e IV.
e) III e IV.

Vous aimerez peut-être aussi