Beruflich Dokumente
Kultur Dokumente
Visite(p) contedo do n apontado por p Esquerda(p) ponteiro para o filho da esquerda de p Direita(p) Pai(p) Irmo(p) eh_esq(p) eh_dir(p) ponteiro para o filho da direita de p ponteiro para o pai de p ponteiro para o irmo de p Retorna true se p filho da esquerda e false, se filho da direita Retorna true se p filho da esquerda e false, se filho da direita
319
320
uma estrutura til quando uma de duas decises devem ser tomadas no decorrer do processo. Encontrar todas as duplicatas em uma lista de nmeros Um forma de fazer isso comparar o nmero como todos os que o precedem
321
o 1 nmero armazenado na raiz de uma rvore com apenas um n interno cada um dos prximos nmeros na lista comparado com a raiz:
caso seja igual uma duplicata caso seja menor, armazenado na sub-rvore da direita seguindo-se recursivamente o mesmo procedimento caso seja maior, armazenado na sub-rvore da esquerda seguindo-se recursivamente o mesmo procedimento
322
18
15
20
17
323
os mtodos diferem conforme a ordem em que se visitam os ns, o problema sendo resolvido
324
Mtodos
pr-ordem:visite a raiz, ento visite a subrvore da esquerda, depois a subrvore da direita em-ordem ou ordem simtrica: visite a subrvore da esquerda, ento visite a raiz, depois a subrvore da direita ps-ordem: visite a subrvore da esquerda, ento visite a subrvore da direita, depois a raiz
325
pr-ordem: -*ab*+fge
ps-ordem:
ab*fg+e*-
g
326
como se visita uma subrvore de cada vez, seguindo-se a regra recursiva , cada subrvore visitada comeando pela raiz
327
Pr-ordem
pre_ordem (pt) { if (pt == NULL) return (); visite(raiz); pre_ordem (pt->esq); pre_ordem (pt-> dir); }
328
em-ordem
em_ordem (pt) { if (pt == NULL) return (); em_ordem (pt->esq); visite(raiz); em_ordem (pt-> dir); }
329
Ps-ordem
pos_ordem (pt) { if (pt == NULL) return (); pos_ordem (pt->esq); pos_ordem (pt-> dir); visite(raiz); }
330
cada n pode receber um nmero de 1 a N um n de nmero i est na posio i da lista seus filhos da esquerda e da direita nas posies 2i+1 e 2i+2, respectivamente
no necessita ponteiros restringe um tamanho para a rvore tambm chamada de representao seqencial
331
D (4 )
E (5 )
F (6 )
G (7 )
H (8 )
I (9 )
B C
D E
I
332
Exerccios
333
em-ordem
p = raiz; do { /* segue pelo ramo da esq. at NULL */ while (p != NULL) { push(p); p=p->esq; } /* verifica se j processou toda rvore */ if (pilha_no_vazia()){ p = pop(); visite(p); p = p->dir; } } while(pilha_no_vazia() || p != NULL); }
A B C
334
335
ns com chaves menores esto na sub-rvore esquerda ns com chaves maiores (ou iguais) esto na sub-rvore direita
para a busca de uma chave v na rvore binria de busca: primeiro compare com a raiz
337
338
a cada passo, garante-se que nenhuma outra parte da rvore contm a chave sendo buscada o procedimento pra quando
339
fazer uma busca com insucesso alocar um novo n necessrio saber por qual n se chegou a NULL ser o pai do novo n
341
342
343
345
at ento, vimos que a implementao da operao de insero simples a remoo de um elemento j mais complexa
remoo de um n folha
os ponteiros esquerdo e direito do pai so setados para NULL o ponteiro apropriado do pai passa a apontar para o filho se um desses dois filhos no possui filhos, use esse n para substituir o n removido
346
substitua este com o elemento cuja chave imediatamente maior (ou menor) sempre folha? seno for folha v repetindo o procedimento
algoritmo?
347
10
10
Removendo 3:
10
Removendo 4:
11
12
Removendo 7 (raiz): substituir o 7 pelo imediatamente maior: 8 como determinar? resulta na remoo do elemento de chave 8
351
A rvore obtida depende da seqncia de insero de ns Para que a rvore binria de busca seja completa
completa tem altura mnima o conjunto das chaves deve ser reordenado rvore comum - O (n) rvore completa - O (log n)
352
o conjunto das chaves deve ser re-ordenado sejam so e s n+1 duas chaves fictcias e j inseridas a cada passo inserir em T uma nova chave que seja de ndice mdio entre i e j - duas chaves j inseridas
353
normalmente estas freqncias so diferentes interessante construir uma rvore binria que seja a melhor possvel no que diz respeito busca para freqncias conhecidas
354
Depende da ordem original dos dados Se o array original est ordenado (ascendente ou descendente), as rvores resultantes s tem filhos a direita ou a esquerda a insero do 1o. n - 0 comparaes a insero do 2o. n - 2 comparaes a insero do 3o. n - 3 comparaes 2 + 3 +....+n = n*(n+1)/2 -1 Complexidade - O(n2) - para inserir n ns
355
Se a lista original estiver organizada, e se uma rvore completa (parecida com completa) for se formando:
356
26
357