Aula 9 - abb

Disponível somente no TrabalhosFeitos
  • Páginas : 8 (1775 palavras )
  • Download(s) : 0
  • Publicado : 1 de novembro de 2012
Ler documento completo
Amostra do texto
INE5408 Estruturas de Dados
Árvores Binárias de Busca - Características - Algoritmos
- Inserção, deleção e pesquisa

Introdução
Árvores (binárias) são muito utilizadas para se representar um grande conjunto de dados onde se deseja encontrar um elemento de acordo com a sua chave. Definição - Árvore Binária de Busca (Niklaus Wirth): “Uma árvore que se encontra organizada de tal forma que, paracada nodo ti, todas as chaves (info) da subárvore à esquerda de ti são menores que (ou iguais a) ti e à direita são maiores que ti”. Termo em Inglês: Search Tree.

Características
Em uma árvore binária de busca é possível encontrar-se qualquer chave existente descendo-se pela árvore:
– sempre à esquerda toda vez que a chave procurada for menor do que a chave do nodo visitado; – sempre à direitatoda vez que for maior.

Características
A escolha da direção de busca só depende da chave que se procura e da chave que o nodo atual possui. A busca de um elemento em uma árvore balanceada com n elementos toma tempo médio < log(n), sendo a busca então O(log n). Graças à estrutura de árvore a busca poderá ser feita com apenas log(n) comparações de elementos.

Exemplo de árvore binária debusca
8 5 15 6

2

11 7

19

1

3

9

13

21

Algoritmo de busca
tNodo* FUNÇÃO busca (chave: tInfo, ptr: *tNodo)

início enquanto (ptr ~= NULO E ptr->info ~= chave) faça // Esquerda ou direita. se (ptr->info < chave) então ptr <- ptr->filhoÀDireita senão ptr <- ptr->filhoÀEsquerda; fim se fim enquanto retorne ptr; fim

Algoritmo de inserção
tNodo* FUNÇÃO inserção (raiz: *tNodo, info: tInfo) oNovo:*tNodo; início se (info < raiz->info) então // Inserção à esquerda. se (raiz->filhoÀEsquerda = NULO) então oNovo <- aloque(tNodo); oNovo->info <- info; oNovo->filhoÀEsquerda <- NULO; oNovo->filhoÀDireita <- NULO; raiz->filhoÀEsquerda <- oNovo; senão raiz <- inserção(raiz->filhoÀEsquerda, info); fim se senão // Inserção à direita. se (raiz->filhoÀDireita = NULO) então oNovo <- aloque(tNodo);oNovo->info <- info; oNovo->filhoÀEsquerda <- NULO; oNovo->filhoÀDireita <- NULO; raiz->filhoÀDireita <- oNovo; senão raiz <- inserção(raiz->filhoÀDireita, info); fim se fim se fim

Algoritmo de inserção
tNodo* FUNÇÃO inserção (raiz: *tNodo, info: tInfo) oNovo: *tNodo; início se (info < raiz->info) então // Inserção à esquerda. se (raiz->filhoÀEsquerda = NULO) então oNovo <- aloque(tNodo);oNovo->info <- info; oNovo->filhoÀEsquerda <- NULO; oNovo->filhoÀDireita <- NULO; raiz->filhoÀEsquerda <- oNovo; senão raiz <- inserção(raiz->filhoÀEsquerda, info); fim se senão // Inserção à direita. se (raiz->filhoÀDireita = NULO) então oNovo <- aloque(tNodo); oNovo->info <- info; oNovo->filhoÀEsquerda <- NULO; oNovo->filhoÀDireita <- NULO; raiz->filhoÀDireita <- oNovo; senão raiz <-inserção(raiz->filhoÀDireita, info); fim se fim se fim

Algoritmo de inserção
tNodo* FUNÇÃO inserção (raiz: *tNodo, info: tInfo) oNovo: *tNodo; início se (info < raiz->info) então // Inserção à esquerda. se (raiz->filhoÀEsquerda = NULO) então oNovo <- aloque(tNodo); oNovo->info <- info; oNovo->filhoÀEsquerda <- NULO; oNovo->filhoÀDireita <- NULO; raiz->filhoÀEsquerda <- oNovo; senão raiz <-inserção(raiz->filhoÀEsquerda, info); fim se senão // Inserção à direita. se (raiz->filhoÀDireita = NULO) então oNovo <- aloque(tNodo); oNovo->info <- info; oNovo->filhoÀEsquerda <- NULO; oNovo->filhoÀDireita <- NULO; raiz->filhoÀDireita <- oNovo; senão raiz <- inserção(raiz->filhoÀDireita, info); fim se fim se fim

Algoritmo de inserção
tNodo* FUNÇÃO inserção (raiz: *tNodo, info: tInfo) oNovo: *tNodo; início se (info< raiz->info) então // Inserção à esquerda. se (raiz->filhoÀEsquerda = NULO) então oNovo <- aloque(tNodo); oNovo->info <- info; oNovo->filhoÀEsquerda <- NULO; oNovo->filhoÀDireita <- NULO; raiz->filhoÀEsquerda <- oNovo; senão raiz <- inserção(raiz->filhoÀEsquerda, info); fim se senão // Inserção à direita. se (raiz->filhoÀDireita = NULO) então oNovo <- aloque(tNodo); oNovo->info <- info;...
tracking img