Você está na página 1de 2

Árvore binária de busca – Aula 3

ESTRUTURAS DE DADOS II UEMG – CAMPUS FRUTAL


PROF. JOÃO PAULO SISTEMAS DE INFORMAÇÃO

Árvore de busca binária

Seja A uma árvore binária cuja raiz armazena um item r. Dizemos que A é uma árvore de
busca binária ou ordenada, se e somente se:
• Todo item armazenado na subárvore esquerda de A é menor que r;
• Todo item armazenado na subárvore direita de A é maior ou igual a r;
• Cada subárvore de A também é uma árvore de busca binária.

Uma consequência importante da propriedade de busca binária é que a projeção de uma


árvore de busca binária produz uma sequência ordenada de todos os seus itens quando projetamos
os nós no eixo X da Figura 1:

Figura 1: Árvore de busca binária

Simulador online de árvore binária de busca

Vamos acessar o endereço a seguir para utilizarmos um simulador que apresenta a


montagem de uma árvore binária de busca:

http://www.cs.jhu.edu/~goodrich/dsa/trees/btree.html

Operações básicas

Para implementar uma árvore binária em C vamos desenvolver um algoritmo utilizando


structs, onde cada item representará um nó da árvore e armazenará um ponteiro para a subárvore da
esquerda e outro ponteiro para a subárvore da direita (nós filhos).
As operações básicas são inserir(), imprimir() e remover().
Todo novo nó é alocado na árvore de acordo com sua hierarquia, ou seja, o número 10 vai
ser inserido à esquerda do nó 11 se este já existir na árvore.

1
Árvore binária de busca – Aula 3

Implementando uma árvore de busca binária

Para começar, vamos introduzir uma nova função chamada folha() que terá a
responsabilidade de criar um novo nó na árvore apontando para NULL em suas ramificações:

noh* folha(int x){
noh* n;
n = (noh*) malloc(sizeof(noh));
n­>esq=NULL;
n­>dir=NULL;
n­>valor=x;
return n;
}

A função recursiva inserir(), abaixo, apresenta a utilização de passagem de parâmetros por


referência usando structs:

void inserir(int x, noh **a)
{
   if (vazia(*a))
      *a = folha(x);
   else if ((*a)­>valor < x)
      inserir(x,&(*a)­>dir);
   else if ((*a)­>valor > x)
      inserir(x,&(*a)­>esq);
}

A função vazia() verifica se o nó passado por parâmetro é ou não vazio, retornando True (1)
ou False (0).

A última função importante é a emordem() que apresentará todos os nós segundo o percurso
“em ordem” estudado nas aulas anteriores.

Exercício para casa (10 pontos, em Trio)

1) Implementar o a função de remoção em árvores de busca binária.


2) Explicar, nos comentários do cabeçalho do código, como a função foi implementada
e quais as maiores dificuldades encontradas.

Referências:
Pereira, Silvio do Lago. Estruturas de Dados Fundamentais: Conceitos e Aplicações. São
Paulo: Érica, 2008.
Wikibooks. Árvores binárias. Disponível em < http://pt.wikibooks.org/wiki/Programar_
em_C/%C3%81rvores_bin%C3%A1rias>. Acesso em 10/06/2010.
W. Celes e J. L. Range. Árvores. Disponível em <http://www.scribd.com/doc/ 26510953/
Estrutura-de-dados-Arvore-binaria>. Acesso em 28/07/2010.

Você também pode gostar