Estruturas de Dados Árvores
Estruturas de Dados Árvores
Estruturas de Dados Árvores
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Estruturas</strong> <strong>de</strong> <strong>Dados</strong><br />
Créditos<br />
Parte <strong>de</strong>ste material consiste <strong>de</strong>:<br />
<strong>Árvores</strong><br />
Prof. Ricardo J. G. B. Campello<br />
Adaptações dos sli<strong>de</strong>s gentilmente cedidos<br />
pela Profa. Maria Cristina F. <strong>de</strong> Oliveira<br />
Adaptados dos originais <strong>de</strong> Walter Aoiama Nagai<br />
e M. Graças Volpe Nunes<br />
Adaptações e extensões dos originais <strong>de</strong><br />
Goodrich & Tamassia<br />
Disponíveis em http://ww3.datastructures.net/<br />
2<br />
1
Introdução<br />
Problema:<br />
Listas Lineares<br />
Lista Enca<strong>de</strong>ada<br />
Eficiente para inserção e remoção dinâmica <strong>de</strong> elementos,<br />
mas ineficiente para busca<br />
Lista Seqüencial (or<strong>de</strong>nada)<br />
Eficiente para busca, mas ineficiente para inserção e<br />
remoção <strong>de</strong> elementos<br />
Possível Solução:<br />
<strong>Árvores</strong><br />
Eficientes para inserção, remoção e busca<br />
Representação não linear...<br />
Introdução<br />
Em computação, uma<br />
árvore é um mo<strong>de</strong>lo<br />
abstrato <strong>de</strong> uma<br />
estrutura hierárquica.<br />
Trata-se <strong>de</strong> uma<br />
estrutura não-linear<br />
constituída <strong>de</strong> nós<br />
com relações <strong>de</strong><br />
parentesco (pai-filho).<br />
Aplicações:<br />
S.O.s (arquivos).<br />
Linguagens (O.O.).<br />
etc<br />
ABC Computadores<br />
Vendas Produção P&D<br />
BR Internacionais<br />
Europa Asia EUA<br />
Laptops Desktops<br />
4<br />
3<br />
2
Introdução<br />
<strong>Árvores</strong> são a<strong>de</strong>quadas para representar<br />
estruturas hierárquicas não lineares, como<br />
relações <strong>de</strong> <strong>de</strong>scendência<br />
pai, filhos, irmãos, etc.<br />
Definição<br />
Homer Simpson<br />
Bart Lisa Maggie<br />
Árvore T: conjunto finito <strong>de</strong> elementos,<br />
<strong>de</strong>nominados nós, nodos ou vértices, tais que:<br />
Se T = ∅ a árvore é dita vazia;<br />
Caso Contrário:<br />
(i) T contém um nó especial, <strong>de</strong>nominado raiz (R T);<br />
(ii) Os <strong>de</strong>mais nós, ou constituem um único conjunto vazio, ou<br />
são divididos em n conjuntos disjuntos não vazios<br />
(T 1,T 2,…,T n), que são, por sua vez, cada qual uma árvore;<br />
T 1,T 2,…,T n são chamadas sub-árvores <strong>de</strong> R T;<br />
R T<br />
T1 T ...<br />
2 Tn 5<br />
6<br />
3
Terminologia<br />
Se um nó Y é raiz <strong>de</strong> uma sub-árvore <strong>de</strong> um<br />
nó X, então X é PAI <strong>de</strong> Y e Y é FILHO <strong>de</strong> X<br />
Dois nós são IRMÃOs se são filhos do<br />
mesmo pai<br />
Se os nós Y 1, Y 2, ..., Y j são irmãos, e o nó Z<br />
é filho <strong>de</strong> Y 1, então Y 2,...,Y j são TIOs <strong>de</strong> Z<br />
Exemplo<br />
FILHOS<br />
DE A<br />
RAIZ da<br />
árvore<br />
E<br />
A<br />
FILHOS<br />
DE B<br />
Nós: A, B, C, D, E, F, G<br />
Folhas: E,F,C,G<br />
B C D<br />
F<br />
G<br />
FILHO<br />
DE D<br />
7<br />
8<br />
4
Terminologia<br />
Raiz (root): nó sem pai (A).<br />
Nó Interno: nó com pelo<br />
menos um filho (A, B, C, F).<br />
Nó Externo ou Folha: nó<br />
sem filhos (E, I, J, K, G, H, D).<br />
Ancestrais (<strong>de</strong> um nó): pai<br />
ou ancestrais do pai do nó.<br />
Descen<strong>de</strong>ntes (<strong>de</strong> um nó):<br />
nós que o possuem como<br />
ancestral.<br />
Sub-Árvore: árvore<br />
consistindo <strong>de</strong> um nó e dos<br />
seus <strong>de</strong>scen<strong>de</strong>ntes.<br />
Exemplo<br />
TIOS <strong>de</strong> F e E<br />
A<br />
A<br />
B C D<br />
E F<br />
I J K<br />
C D B<br />
DESCENDENTES<br />
DE A<br />
ANCESTRAIS DE G<br />
G E<br />
F<br />
G H<br />
Sub-árvore 9<br />
NÓS<br />
IRMÃOS<br />
10<br />
5
Terminologia<br />
O NÍVEL <strong>de</strong> um nó X é <strong>de</strong>finido como:<br />
O nível <strong>de</strong> um nó raiz é 1<br />
O nível <strong>de</strong> um nó não raiz é dado por<br />
Nível <strong>de</strong> seu nó PAI + 1<br />
O GRAU <strong>de</strong> um nó X pertencente a uma<br />
árvore é igual ao número <strong>de</strong> filhos <strong>de</strong> X<br />
Se X é folha, então Grau(X) = 0<br />
O GRAU <strong>de</strong> uma árvore T é o maior entre<br />
os graus <strong>de</strong> todos os seus nós<br />
Exemplo: NÍVEL 1 A<br />
NÍVEL 2<br />
B C D E<br />
F G H NÍVEL 3 I J K L<br />
M N O<br />
P<br />
NÍVEL 5<br />
NÍVEL 4<br />
11<br />
Grau <strong>de</strong> A: 4<br />
Grau <strong>de</strong> B: 3<br />
Grau <strong>de</strong> C: 0<br />
Grau <strong>de</strong> M: 1<br />
Grau da Árvore: 4<br />
12<br />
6
Terminologia<br />
Profundida<strong>de</strong> (<strong>de</strong> um nó):<br />
número <strong>de</strong> ancestrais.<br />
Raiz possui profundida<strong>de</strong> zero.<br />
Altura (<strong>de</strong> uma árvore): máxima<br />
profundida<strong>de</strong> <strong>de</strong> qualquer nó.<br />
Exemplo ao lado ⇒ 3.<br />
Altura (<strong>de</strong> um nó): altura da<br />
sub-árvore com raiz naquele nó.<br />
Folhas possuem altura zero.<br />
Raiz possui altura da árvore.<br />
Profundida<strong>de</strong> (<strong>de</strong> uma árvore):<br />
máx. profundida<strong>de</strong> <strong>de</strong> uma folha.<br />
Equivalente à altura.<br />
Exemplo:<br />
A<br />
A<br />
B C D<br />
E F<br />
I J K<br />
B C D E<br />
G H<br />
Nota: Terminologia não é universal!<br />
Alguns autores consi<strong>de</strong>ram Sub-Árvore como 1<br />
(ao invés <strong>de</strong> zero) a altura das folhas<br />
e a profundida<strong>de</strong> da raiz, o que altera<br />
as <strong>de</strong>mais <strong>de</strong>finições.<br />
F G H I J K L<br />
M N O<br />
P<br />
Altura Árvore = Profundida<strong>de</strong> Árvore = 4<br />
ALTURA DE A: 4<br />
ALTURA DE C: 0<br />
ALTURA DE D: 1<br />
PROF. DE A: 0<br />
PROF. DE C: 1<br />
PROF. DE D: 1<br />
13<br />
14<br />
7
Outras Formas <strong>de</strong> Representação<br />
Representação por Parênteses Aninhados:<br />
( A (B) ( C ( D (G) (H) ) (E) ( F (I) ) ) )<br />
ou seja, uma lista generalizada!!<br />
Representação por Diagramas <strong>de</strong> Venn:<br />
B<br />
A<br />
C<br />
D<br />
G<br />
<strong>Árvores</strong> Binárias (AB)<br />
Uma Árvore Binária T é um conjunto finito <strong>de</strong><br />
elementos, <strong>de</strong>nominados nós, nodos ou<br />
vértices, tal que:<br />
H<br />
E<br />
F<br />
I<br />
(i) Se T = ∅, a árvore é dita vazia, ou<br />
(ii) T contém um nó especial, chamado raiz <strong>de</strong> T (R T),<br />
e os <strong>de</strong>mais nós po<strong>de</strong>m ser subdivididos em dois<br />
sub-conjuntos distintos, T E e T D, os quais também<br />
são árvores binárias (possivelmente vazias).<br />
T E e T D são <strong>de</strong>nominados sub-árvore esquerda e<br />
sub-árvore direita <strong>de</strong> T, respectivamente<br />
T E<br />
R T<br />
15<br />
T D<br />
16<br />
8
<strong>Árvores</strong> Binárias (AB)<br />
A raiz da sub-árvore esquerda (direita) <strong>de</strong> um nó v,<br />
se existir, é <strong>de</strong>nominada filho esquerdo (direito)<br />
<strong>de</strong> v.<br />
Pela natureza da árvore binária, o filho esquerdo po<strong>de</strong><br />
existir sem o direito, e vice-versa<br />
Exemplo: A<br />
D<br />
G<br />
B<br />
Algumas Proprieda<strong>de</strong>s <strong>de</strong> ABs<br />
E<br />
Qual a altura máxima <strong>de</strong> uma AB com n nós?<br />
Resposta: n – 1<br />
Árvore <strong>de</strong>generada ≡ Lista<br />
Qual a altura mínima <strong>de</strong> uma AB c/ n nós?<br />
Resposta: teto[ log 2(n+1) ] – 1<br />
4<br />
1<br />
2 3<br />
5 6 7<br />
H<br />
C<br />
F<br />
I<br />
n-1<br />
n = 1 ⇒ h = 0<br />
n = 2, 3 ⇒ h = 1<br />
n = 4, ..., 7 ⇒ h = 2<br />
n = 8, ..., 15 ⇒ h = 3<br />
...<br />
n = 2 h+1 – 1 ⇒ h = log 2(n+1) – 1<br />
1<br />
0<br />
17<br />
18<br />
9
Árvore Binária Própria<br />
Também <strong>de</strong>nominada <strong>de</strong> árvore<br />
estritamente binária, é tal que:<br />
Cada nó interno possui exatamente<br />
2 filhos (não vazios).<br />
Denomina-se o par <strong>de</strong> filhos <strong>de</strong>:<br />
filho esquerdo (left child), e<br />
filho direito (right child).<br />
Definição recursiva:<br />
Uma árvore <strong>de</strong> um único nó raiz,<br />
ou<br />
Uma árvore cuja raiz possui um<br />
par or<strong>de</strong>nado <strong>de</strong> filhos, cada um<br />
dos quais é a raiz <strong>de</strong> uma árvore<br />
binária própria.<br />
Aplicações:<br />
Expressões aritméticas.<br />
Processos <strong>de</strong> <strong>de</strong>cisão.<br />
etc<br />
A<br />
B C<br />
D E<br />
H I<br />
F G<br />
Proprieda<strong>de</strong>s <strong>de</strong> <strong>Árvores</strong> Binárias Próprias<br />
Notação:<br />
n número <strong>de</strong> nós.<br />
e número <strong>de</strong> nós<br />
externos.<br />
i número <strong>de</strong> nós<br />
internos.<br />
h altura.<br />
19<br />
Algumas Proprieda<strong>de</strong>s:<br />
e = i + 1<br />
n = 2e − 1<br />
h ≤ i<br />
h ≤ (n − 1)/2<br />
e ≤ 2 h<br />
h ≥ log 2 e<br />
h ≥ log 2 (n + 1) − 1<br />
20<br />
10
Árvore Binária Própria<br />
Exemplo <strong>de</strong> Aplicação:<br />
Árvore <strong>de</strong> Expressão Aritmética<br />
Árvore Binária associada com uma expressão aritmética<br />
Nós internos: operadores<br />
Nós externos: operandos<br />
Exemplo: (2 × (a − 1) + (3 × b))<br />
Árvore Binária Própria<br />
Exemplo <strong>de</strong> Aplicação:<br />
Árvore Binária <strong>de</strong> Decisão<br />
2<br />
×<br />
−<br />
a 1<br />
Árvore binária associada a um processo <strong>de</strong> <strong>de</strong>cisão<br />
Nós internos: questões com respostas sim ou não<br />
Nós externos: <strong>de</strong>cisões<br />
Exemplo:<br />
Poupança<br />
Conservador?<br />
Sim Não<br />
+<br />
Curto prazo?<br />
Sim Não<br />
×<br />
3 b<br />
Fundo R. Fixa Aceita Altos Riscos?<br />
21<br />
Sim Não<br />
Ações Carteira Mista<br />
22<br />
11
Árvore Binária Completa<br />
Árvore Binária Completa (ABC):<br />
É própria*<br />
Se a profundida<strong>de</strong> da árvore é d, então cada nó folha está<br />
no nível d ou no nível d+1<br />
Os nós folha no nível d estão todos à direita dos internos<br />
nível d+1<br />
nível d<br />
* Exceção po<strong>de</strong> eventualmente ser feita ao nó folha mais à direita do último nível, que po<strong>de</strong> não existir<br />
Árvore Binária Cheia<br />
Árvore Binária Completa Cheia (ABCC)<br />
É ABC, e<br />
Todos os seus nós folha estão no mesmo nível<br />
C,D,E,F estão no nível 3<br />
(profundida<strong>de</strong> 2)<br />
B<br />
A<br />
G<br />
C D E F<br />
23<br />
24<br />
12
Árvore Binária Cheia<br />
Proprieda<strong>de</strong> Importante:<br />
Dada uma ABCC e sua profundida<strong>de</strong> d (ou altura<br />
h), calcula-se o número n <strong>de</strong> nós na árvore como:<br />
Nível 1 (d = 0): 1 nó (total = 1 nó)<br />
Nível 2 (d = 1): 2 nós (total = 3 nós)<br />
Nível 3 (d = 2): 4 nós (total = 7 nós)<br />
...<br />
Nível i (d = i−1): 2 d nós (total = 2 i – 1 = 2 d+1 – 1 nós)<br />
Logo: n = 2 d+1 – 1 = 2 h+1 – 1<br />
<strong>Árvores</strong> Binárias Balanceadas<br />
<strong>Árvores</strong> Balanceadas: São tais que qualquer <strong>de</strong> suas<br />
sub-árvores com m nós possui altura O(log m)<br />
Árvore Binária Balanceada: Para cada nó, as alturas<br />
<strong>de</strong> suas sub-árvores diferem em, no máximo, 1<br />
B<br />
A<br />
C<br />
D E<br />
Não é difícil mostrar que essa condição implica <strong>de</strong> fato que a<br />
árvore é balanceada segundo a <strong>de</strong>finição geral acima<br />
D<br />
B<br />
E<br />
A<br />
F<br />
C<br />
25<br />
26<br />
13
<strong>Árvores</strong> Binárias Balanceadas<br />
Árvore Binária Perfeitamente Balanceada<br />
Para cada nó, o no. <strong>de</strong> nós <strong>de</strong> suas sub-árvores<br />
esquerda e direita difere em, no máximo, 1<br />
Toda AB Perfeitamente Balanceada é AB Balanceada,<br />
mas o inverso não é necessariamente verda<strong>de</strong>.<br />
Exemplo:<br />
Exercícios<br />
D<br />
B<br />
E<br />
Prove por contra-exemplo que uma AB própria não é<br />
necessariamente uma AB completa.<br />
Represente a seguinte expressão aritmética em uma<br />
árvore binária própria <strong>de</strong> expressão aritmética:<br />
( 5 + ( ( 2 / (a + 1) ) − (3 × b) ) ) × ( 10 / c )<br />
Responda com relação à árvore do exercício anterior:<br />
Qual a altura da árvore ?<br />
Qual a profundida<strong>de</strong> da árvore?<br />
Qual o grau da árvore?<br />
A<br />
Quais os ancestrais, os <strong>de</strong>scen<strong>de</strong>ntes, a profundida<strong>de</strong>, a<br />
altura, o nível, o grau, o pai, os tios, os irmãos e os filhos do<br />
nó correspon<strong>de</strong>nte ao operador <strong>de</strong> subtração da expressão ?<br />
C<br />
27<br />
14
Exercícios<br />
Represente a árvore do exercício anterior via:<br />
Parênteses Aninhados<br />
Diagrama <strong>de</strong> Venn.<br />
Qual a altura máxima que uma árvore estritamente<br />
binária com 45 nós po<strong>de</strong> ter? Justifique.<br />
Qual a altura máxima que uma árvore estritamente<br />
binária com 27 nós externos po<strong>de</strong> ter? Justifique.<br />
Qual a altura mínima que uma árvore estritamente<br />
binária com 43 nós po<strong>de</strong> ter? Justifique.<br />
Qual a altura mínima que uma árvore estritamente<br />
binária com 30 nós externos po<strong>de</strong> ter? Justifique.<br />
29<br />
15