Você está na página 1de 23

rvore Binria de Busca

319

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


320

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

321

rvore Binria de Busca


6 4 3 5 9

10

322

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

323

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); }
324

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

325

Inserindo em rvore Binria de Busca


6 4 3 5 9

10

Inserindo o 9

326

Inserindo em rvore Binria de Busca


6 4 3 5 7 2 9

10

Inserindo o 7

327

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 if ( valor > pt-> chave) pt = pt->dir; } while(pt != NULL) && (pt->chave != valor); 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); } }
328

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

329

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

330

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?

331

Remoo em rvore Binria de Busca


6 4 3 5 7 2

10

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


332

Remoo em rvore Binria de Busca


6 4 3 5 7 2 9

10

Removendo 3:

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


333

Remoo em rvore Binria de Busca


6 4-5 3 5 7 2 9

10

Removendo 4:

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


334

Remoo em rvore Binria de Busca


6 - 7 4 3 5 7 2

10

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

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)

336

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

337

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
338

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
339

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 )

340

Eficincia da rvore de Busca


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

341

Você também pode gostar