Árvores binárias de busca - 0.5cmscc0202 - algoritmos e ... · nestecaso,existem2 opções...

43
Árvores Binárias de Busca Árvores Binárias de Busca SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista http://www.icmc.usp.br/~paulovic [email protected] Instituto de Ciências Matemáticas e de Computação (ICMC) Universidade de São Paulo (USP) 4 de novembro de 2010

Upload: doankhuong

Post on 08-Jan-2019

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de Busca

Árvores Binárias de Busca

SCC0202 - Algoritmos e Estruturas de Dados I

Prof. Fernando V. Paulovich*Baseado no material do Prof. Gustavo Batista

http://www.icmc.usp.br/[email protected]

Instituto de Ciências Matemáticas e de Computação (ICMC)Universidade de São Paulo (USP)

4 de novembro de 2010

Page 2: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaConceitos Introdutórios

Sumário

1 Conceitos Introdutórios

2 Inserção em Árvores Binárias de Busca

3 Pesquisa em Árvores Binárias de Busca

4 Remoção em Árvores Binárias de Busca

5 Conceitos Adicionais

Page 3: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaConceitos Introdutórios

Sumário

1 Conceitos Introdutórios

2 Inserção em Árvores Binárias de Busca

3 Pesquisa em Árvores Binárias de Busca

4 Remoção em Árvores Binárias de Busca

5 Conceitos Adicionais

Page 4: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaConceitos Introdutórios

Definições

Uma Árvore Binária de Busca (ABB) possui asseguintes propriedades

É uma Árvore Binária (AB)Seja S = {s1, . . . , sn} o conjunto de chaves dos nós daárvore T

Esse conjunto satisfaz s1 < . . . < snA cada nó vj ∈ T está associada uma chave distintasj ∈ S, que pode ser consultada por r(vj) = sj

Dado um nó v de T

Se vi pertence a sub-árvore esquerda de v, entãor(vi) < r(v)Se vi pertence a sub-árvore direita de v, entãor(vi) > r(v)

Page 5: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaConceitos Introdutórios

Definições

Em outras palavrasOs nós pertencentes à sub-árvore esquerda possuemvalores menores do que o valor associado ao nó-raiz rOs nós pertencentes à sub-árvore direita possuem valoresmaiores do que o valor associado ao nó-raiz r

Page 6: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaConceitos Introdutórios

Definições

Um percurso em-ordem em uma ABB resulta nasequência de valores em ordem crescenteSe invertêssemos as propriedades descritas nadefinição anterior, de maneira que a sub-árvore esquerdade um nó contivesse valores maiores e a sub-árvore direitavalores menores, o percurso em-ordem resultaria nosvalores em ordem decrescenteUma ABB criada a partir de um conjunto de valoresnão é única: o resultado depende da sequência deinserção dos dados

Page 7: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaConceitos Introdutórios

Definições

A grande utilidade da árvore binária de busca é armazenardados contra os quais outros dados são frequentementeverificados (busca!)Uma árvore de binária de busca é dinâmica e pode sofreralterações (inserções e remoções de nós) após ter sidocriada

Page 8: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaConceitos Introdutórios

Operações em ABB’s

InserçãoPesquisaRemoção

Page 9: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaInserção em Árvores Binárias de Busca

Sumário

1 Conceitos Introdutórios

2 Inserção em Árvores Binárias de Busca

3 Pesquisa em Árvores Binárias de Busca

4 Remoção em Árvores Binárias de Busca

5 Conceitos Adicionais

Page 10: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaInserção em Árvores Binárias de Busca

Inserção (operações em ABB’s)

Passos do algoritmo de inserçãoProcure um “local” para inserir o novo nó, começando aprocura a partir do nó-raizPara cada nó-raiz de uma sub-árvore, compare; se o novonó possui um valor menor do que o valor no nó-raiz (vaipara sub-árvore esquerda), ou se o valor é maior que ovalor no nó-raiz (vai para sub-árvore direita)Se um ponteiro (filho esquerdo/direito de um nó-raiz)nulo é atingido, coloque o novo nó como sendo filho donó-raiz

Page 11: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaInserção em Árvores Binárias de Busca

Inserção

Para entender o algoritmo considere a inserção doconjunto de números, na sequência

17,99,13,1,3,100,400

No início a ABB está vazia!

Page 12: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaInserção em Árvores Binárias de Busca

Inserção

O número 17 será inseridotornando-se o nó raizA inserção do 99 inicia-se naraiz. Compara-se 99 com 17Como 99 > 17, 99 deve sercolocado na sub-árvore direitado nó contendo 17 (subárvoredireita, inicialmente, nula)

Page 13: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaInserção em Árvores Binárias de Busca

Inserção

A inserção do 13 inicia-se naraizCompara-se 13 com 17.Como 13 < 17, 13 deve sercolocado na sub-árvoreesquerda do nó contendo 17Já que o nó 17 não possuidescendente esquerdo, 13 éinserido na árvore nessaposição

Page 14: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaInserção em Árvores Binárias de Busca

Inserção

Repete-se o procedimentopara inserir o valor 11 < 17, então será inserido nasub-árvore esquerdaChegando nela, encontra-se onó 13, 1 < 13 então ele seráinserido na sub-árvoreesquerda de 13

Page 15: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaInserção em Árvores Binárias de Busca

Inserção

Repete-se o procedimentopara inserir o elemento 3

3 < 173 < 133 > 1

Page 16: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaInserção em Árvores Binárias de Busca

Inserção

Repete-se o procedimentopara inserir o elemento 100

100 > 17100 > 99

Page 17: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaInserção em Árvores Binárias de Busca

Inserção

Repete-se o procedimentopara inserir o elemento 400

400 > 17400 > 99400 > 100

Page 18: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaInserção em Árvores Binárias de Busca

Relembrando

1 typedef struct {2 int chave;3 int valor;4 } INFO;56 typedef struct NO {7 INFO info;8 struct NO *fesq;9 struct NO *fdir;

10 } NO;1112 typedef struct {13 NO *raiz;14 } ARVORE;

Page 19: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaInserção em Árvores Binárias de Busca

Relembrando

1 void criar(ARVORE *arv) {2 arv->raiz = NULL;3 }45 int criar_raiz(ARVORE *arv, INFO *info) {6 arv->raiz = (NO*)malloc(sizeof(NO));78 if (arv->raiz != NULL) {9 arv->raiz->fesq = NULL;

10 arv->raiz->fdir = NULL;11 arv->raiz->info = *info;12 return 1;13 }1415 return 0;16 }

Page 20: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaInserção em Árvores Binárias de Busca

Relembrando

1 NO *inserir_direita(NO *no, INFO *info) {2 no->fdir = (NO*)malloc(sizeof(NO));34 if (no->fdir != NULL) {5 no->fdir->fesq = NULL;6 no->fdir->fdir = NULL;7 no->fdir->info = *info;8 }9

10 return no->fdir;11 }1213 NO *inserir_esquerda(NO *no, INFO *info) {14 no->fesq = (NO*)malloc(sizeof(NO));1516 if (no->fesq != NULL) {17 no->fesq->fesq = NULL;18 no->fesq->fdir = NULL;19 no->fesq->info = *info;20 }2122 return no->fesq;23 }

Page 21: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaInserção em Árvores Binárias de Busca

Código

1 int inserir_aux(NO *no, INFO *info) {2 if (no->info.chave > info->chave) {3 if (no->fesq == NULL) {4 return (inserir_esquerda(no, info) != NULL);5 } else {6 return inserir_aux(no->fesq, info);7 }8 } else {9 if (no->fdir == NULL) {

10 return (inserir_direita(no, info) != NULL);11 } else {12 return inserir_aux(no->fdir, info);13 }14 }15 }161718 int inserir(ARVORE *arv, INFO *info) {19 if (arv->raiz == NULL) {20 return criar_raiz(arv, info);21 } else {22 return inserir_aux(arv->raiz, info);23 }24 }

Page 22: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaInserção em Árvores Binárias de Busca

Exercícios

Criar um método iterativo para inserção em ABB

Page 23: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaPesquisa em Árvores Binárias de Busca

Sumário

1 Conceitos Introdutórios

2 Inserção em Árvores Binárias de Busca

3 Pesquisa em Árvores Binárias de Busca

4 Remoção em Árvores Binárias de Busca

5 Conceitos Adicionais

Page 24: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaPesquisa em Árvores Binárias de Busca

Pesquisa (operações em ABB’s)

Passos do algoritmo de buscaComece a busca a partir do nó-raizPara cada nó-raiz de uma sub-árvore compare: se o valorprocurado é menor que o valor no nó-raiz (continua pelasub-árvore esquerda), ou se o valor é maior que o valorno nó-raiz (sub-árvore direita)Caso o nó contendo a chave pesquisada seja encontrado,retorne true e o nó pesquisado, caso contrário retornefalse

Page 25: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaPesquisa em Árvores Binárias de Busca

Pesquisa

1 int buscar_aux(NO *no, INFO *info) {2 if (no == NULL) {3 return 0;4 } else {5 if (no->info.chave > info->chave) {6 return buscar_aux(no->fesq, info);7 } else if (no->info.chave < info->chave) {8 return buscar_aux(no->fdir, info);9 } else {

10 info->valor = no->info.valor;11 return 1;12 }13 }14 }1516 int buscar(ARVORE *arv, INFO *info) {17 return buscar_aux(arv->raiz, info);18 }

Page 26: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaPesquisa em Árvores Binárias de Busca

Exercícios

Criar um método iterativo para busca em ABB

Page 27: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaRemoção em Árvores Binárias de Busca

Sumário

1 Conceitos Introdutórios

2 Inserção em Árvores Binárias de Busca

3 Pesquisa em Árvores Binárias de Busca

4 Remoção em Árvores Binárias de Busca

5 Conceitos Adicionais

Page 28: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaRemoção em Árvores Binárias de Busca

Remoção (operações em ABB’s)

Casos a serem considerados no algoritmo de remoção denós de uma ABB

Caso 1: o nó é folhaO nó pode ser retirado sem problema

Caso 2: o nó possui uma sub-árvore (esq/dir)O nó-raiz da sub-árvore (esq/dir) “ocupa” o lugar do nóretirado

Caso 3: o nó possui duas sub-árvoresO nó contendo o menor valor da sub-árvore direita pode“ocupar” o lugarOu o maior valor da sub-árvore esquerda pode “ocupar”o lugar

Page 29: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaRemoção em Árvores Binárias de Busca

Remoção - Caso 1

Caso o valor a ser removidoseja o 15Pode ser removido semproblema, não requer ajustesposteriores

Page 30: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaRemoção em Árvores Binárias de Busca

Remoção - Caso 1

Os nós com os valores 10 e 13também podem ser removidos

Page 31: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaRemoção em Árvores Binárias de Busca

Remoção - Caso 2

Removendo-se o nó com ovalor 5Como ele possui somente asub-árvore direita, o nócontendo o valor 6 pode“ocupar” o lugar do nóremovido

Page 32: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaRemoção em Árvores Binárias de Busca

Remoção - Caso 2

Esse segundo caso é análogo,caso existisse um nó comsomente uma sub-árvoreesquerda

Page 33: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaRemoção em Árvores Binárias de Busca

Remoção - Caso 3

Eliminando-se o nó de chave11Neste caso, existem 2 opções

O nó com chave 10 pode“ocupar” o lugar donó-raiz, ouO nó com chave 12 pode“ocupar” o lugar do nó-raiz

Page 34: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaRemoção em Árvores Binárias de Busca

Remoção

1 int remover_aux(ARVORE *arv, NO *pant, NO *prem, int chave) {2 if (prem == NULL) { //chave não encontrada3 return 0;4 } else if (prem->info.chave > chave) {5 return remover_aux(arv, prem, prem->fesq, chave);6 } else if (prem->info.chave < chave) {7 return remover_aux(arv, prem, prem->fdir, chave);8 } else {9 //tem apenas um filho

10 if (prem->fdir == NULL || prem->fesq == NULL) {11 //pega o único filho não nulo12 NO *pprox = (prem->fdir == NULL) ? prem->fesq : prem->fdir;1314 if (pant == NULL) arv->raiz = pprox;15 else if (pant->fdir == prem) pant->fdir = pprox;16 else pant->fesq = pprox;1718 free(prem);19 } else { //tem os dois filhos20 //troca com o maximo da subarvore esquerda21 trocar_max_esq(prem, prem, prem->fesq);22 }2324 return 1;25 }26 }

Page 35: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaRemoção em Árvores Binárias de Busca

Remoção

Troca com o máximo elemento da sub-árvore esquerda

1 void trocar_max_esq(NO *prem, NO *pant, NO *pno) {2 if (pno->fdir != NULL) {3 trocar_max_esq(prem, pno, pno->fdir);4 } else {5 //raiz da arvore esquerda tem filhos a direita6 if (pant != prem) pant->fdir = pno->fesq;7 else pant->fesq = pno->fesq;89 prem->info = pno->info;

10 free(pno);11 }12 }

Page 36: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaRemoção em Árvores Binárias de Busca

Remoção

1 int remover(ARVORE *arv, int chave) {2 if (arv->raiz != NULL) {3 return remover_aux(arv, NULL, arv->raiz, chave);4 }5 return 0;6 }

Page 37: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaConceitos Adicionais

Sumário

1 Conceitos Introdutórios

2 Inserção em Árvores Binárias de Busca

3 Pesquisa em Árvores Binárias de Busca

4 Remoção em Árvores Binárias de Busca

5 Conceitos Adicionais

Page 38: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaConceitos Adicionais

Complexidade da busca em ABB

Pior casoNúmero de passos é determinado pela altura da árvoreÁrvore degenerada possui altura igual a n

Altura da árvore depende da sequência de inserção daschaves

O que acontece se uma sequência ordenada de chaves éinserida

Busca eficiente se árvore razoavelmente balanceada

Page 39: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaConceitos Adicionais

Árvores Binárias de Busca

ABB “aleatória”Nós externos: descendentes dos nós folha (não estão, defato, na árvore)Uma árvore A com n nós possui n+ 1 nós externosUma inserção em A é considerada “aleatória” se ela temprobabilidade igual de acontecer em qualquer um dosn+ 1 nós externosUma ABB aleatória com n nós é uma árvore resultantede n inserções aleatórias sucessivas em uma árvoreinicialmente vazia

Page 40: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaConceitos Adicionais

Árvores Binárias de Busca

É possível demonstrar que para uma ABB “aleatória” onúmero esperado de comparações para recuperar umregistro qualquer é cerca de 1, 39 ∗ log2(n)

39% pior do que o custo do acesso em uma árvorebalanceada

Pode ser necessário garantir um melhor balanceamento daABB para melhor desempenho na busca

Page 41: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaConceitos Adicionais

Árvores Binárias de Busca

As complexidade das operações de inserção e remoçãotambém dependem da eficiência da buscaO tempo necessário para realizar essas operações dependeprincipalmente do tempo necessário para encontrar aposição do nó a ser inserido/removidoA remoção ainda pode requerer encontrar o nó máximoda sub-árvore esquerda (troca_max_esq(...)), mas onúmero de operações realizadas é sempre menor ou igualdo que a altura da árvore

Page 42: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaConceitos Adicionais

Exercícios

Quais sequências de inserções criam uma ABBdegenerada? Quais sequências criam uma ABBbalanceada?Implemente um TAD para árvores binárias de busca comas operações discutidas em aulaImplemente uma versão iterativa do algoritmo deremoção em ABBs

Page 43: Árvores Binárias de Busca - 0.5cmSCC0202 - Algoritmos e ... · Nestecaso,existem2 opções Onócomchave10 pode “ocupar” olugardo nó-raiz,ou Onócomchave12 pode “ocupar”

Árvores Binárias de BuscaConceitos Adicionais

Exercícios

Escreva uma função que verifique se uma árvore bináriaestá perfeitamente balanceada

O número de nós de suas sub-árvores esquerda e direitadifere em, no máximo, 1