Sie sind auf Seite 1von 39

Operaes em rvores Binrias

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

Operaes em rvores Binrias


p = cria(x) resp = filho_esq(p,x) Cria uma AB com apenas um n com contedo x. Retorna o ponteiro para a nova rvore. Cria um filho esquerda do n apontado por p, com contedo x. Retorna false caso j exista um filho esquerdo e true caso contrio. Cria um filho direita do n apontado por p, com contedo x. Retorna false caso j exista um filho direito e true caso contrio.

resp = filho_dir (p,x)

320

Aplicaes Com rvores Binrias

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

isto no uma soluo eficiente

321

Aplicaes Com rvores Binrias

Soluo: empregar uma rvore binria

Armazenam-se os nmeros na rvore de forma a:

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

Aplicaes Com rvores Binrias


14, 18, 4, 9, 7, 15, 3, 5, 17, 4, 20, 9, 5
14

18

15

20

17

323

Aplicaes com rvores Binrias

outra aplicao comum atravessar a rvore binria, visitando cada n

como sistematicamente visitaremos cada n?

operao trivial para listas lineares

para rvores, existem diferentes formas de proceder

os mtodos diferem conforme a ordem em que se visitam os ns, o problema sendo resolvido
324

Atravessando rvores Binrias

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

Atravessando rvores Binrias


a*b+d - (f+g) * e -

pr-ordem: -*ab*+fge

em-ordem: a*b - f+g * e


e

ps-ordem:
ab*fg+e*-

g
326

Atravessando rvores Binrias

implementao simples dos mtodos recursiva

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

rvore Binria Completa

representao em lista sequencial


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

rvore Binria quase Completa


A (1 )
B (2 ) C (3 )

D (4 )

E (5 )

F (6 )

G (7 )

H (8 )

I (9 )

B C

D E

I
332

Exerccios

implementar os procedimentos pr-ordem, em-ordem e ps-ordem de forma no recursiva

calcular a altura de cada n de uma rvore binria (exerccio do livro texto)

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

rvore Binria de Busca

335

rvore Binria de Busca

construda de tal forma que, para cada n:

ns com chaves menores esto na sub-rvore esquerda ns com chaves maiores (ou iguais) esto na sub-rvore direita

a insero dos ns da rvore deve satisfazer a essa propriedade


336

rvore Binria de Busca

para a busca de uma chave v na rvore binria de busca: primeiro compare com a raiz

se menor, v para a sub- rvore esquerda se maior, para a sub-rvore direita

aplique o mtodo recursivamente

337

rvore Binria de Busca


6 4 8

338

rvore Binria de Busca

a cada passo, garante-se que nenhuma outra parte da rvore contm a chave sendo buscada o procedimento pra quando

o n com v encontrado seno, chega-se a NULL

339

rvore Binria de Busca


busca_arvore_nao_recursivo (v, pt) { do { if (v < pt->info) pt = pt-> esq; else pt = pt-> dir; }while (pt != NULL) && (v != pt->info); return(pt); }
340

Inserindo em rvore Binria de Busca

Para inserir um n na rvore:


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

Inserindo em rvore Binria de Busca


6

342

Inserindo em rvore Binria de Busca


6

343

Insero rvore Binria de Busca


insere_rvore (int valor, tipo_n * pt) { tipo_n * pai; do{ pai = pt ; if (valor < pt->chave) pt = pt ->esq ; else pt = pt->esq; } while(pt != NULL); if (pt == NULL){ pt = aloca(); pt ->chave = valor; pt->esq = NULL; pt->dir = NULL; if (v < pai->chave) pai ->esq = pt ; else pai ->dir = pt ; return(pt); } }
344

Insero rvore Binria de Busca

a rvore est classificada se percorrida da forma correta (pre, pos ou em-ordem?)

as chaves aparecem em ordem se lidas da esquerda para a direita

podemos ordenar uma sequncia como se fosse uma srie de inseres

o programa tem apenas os ponteiros para se preocupar qual a diferena

345

Remoo em rvore Binria de Busca

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

se possui apenas um filho

se o n possui dois filhos

346

Remoo em rvore Binria de Busca

seno: substituir o valor do n a ser removido

substitua este com o elemento cuja chave imediatamente maior (ou menor) sempre folha? seno for folha v repetindo o procedimento

algoritmo?

347

Remoo em rvore Binria de Busca


6 4 9

10

Removendo 5: basta que o ponteiro a direita de 4 aponte para NULL


348

Remoo em rvore Binria de Busca


6 4 9

10

Removendo 3:

basta que substituir o n 3 pelo n 2 continua valendo a regra de formao da rvore


349

Remoo em rvore Binria de Busca


6 4 9

10

Removendo 4:

basta que o substituir 4 pelo 5 continua valendo a regra de formao da rvore


350

Remoo em rvore Binria de Busca


7 4 10

11

12

Removendo 7 (raiz): substituir o 7 pelo imediatamente maior: 8 como determinar? resulta na remoo do elemento de chave 8
351

rvore Binria de Busca

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

rvore Binria de Busca

uma rvore binria de busca completa


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

rvore Binria de Busca

rvore completa: tima para a busca

quando a freqncia de acesso aos ns igual

normalmente estas freqncias so diferentes interessante construir uma rvore binria que seja a melhor possvel no que diz respeito busca para freqncias conhecidas
354

Eficincia da rvore de Busca


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

Eficincia da rvore de Busca

Se a lista original estiver organizada, e se uma rvore completa (parecida com completa) for se formando:

complexidade da insero = O( n log n )

356

Eficincia da rvore de Busca

12, 8, 17, 4, 16 A rvore balanceada


12
8 17

26

357

Das könnte Ihnen auch gefallen