Você está na página 1de 21

Laboratrio de Estrutura de

Dados - rvore de Busca Binria


Matheus Gonalves Ribeiro
Introduo
rvores de Busca Binria

um tipo especial de rvore binria


Utilizada para facilitar busca e ordenao

Valor da raiz :

Maior que o valor da sae e


Menor que o valor da sad
Retorno ordenado
Exemplo

26

42
14

37 57
9 17

2 11 22 49
Representao em C
Similar rvore binria

a informao (int, char, float)


ponteiros para as subrvores: esquerda e direita
Operaes
Criao de rvores vazias Impreso em ordem simtrica (ordenado-
caso seja ABB)
Operaes adicionais
Funes:

cria_abb_vazia( )
imprime_abb( )
anlogas s operaes em rvores binrias comuns

Insero: inserir um novo elemento respeitando as regras de ABB

Busca: realizar a busca de um elemento na ABB

Remoo: retira um elemento da rvore respeitando as regras da ABB


Insero na ABB
Para inserir um valor v em uma rvore

Utiliza-se estrutura recursiva e ordenao a partir das regras:

Se a (sub)rvore for vazia, deve ser substituda por uma rvore cujo o nico
n (raiz) contm o valor v
Se a rvore no for vazia, comparamos v ao valor na raiz da rvore e
inserimos v na sae (caso seja menor) ou sad (caso seja maior)
Insero na ABB
Busca na rvore

A operao de busca explora:

Propriedade de ordenao
da rvore
Recurso
Remoo na ABB
Alguns casos devero ser considerados:

Caso a rvore esteja vazia, nada feito


Caso a rvore no esteja vazia, compara-se o valor armazenado no n raiz ao
valor se deseja retirar
Se o valor da raiz for maior do que o valor do n a ser retirado, chama-se
recursivamente a funo para retirar os elementos da sae
Caso contrrio, retira-se o elemento da sad
Caso o valor associado raiz seja igual, o valor a ser retirado foi
encontrado e pode-se remover o ns
Sempre retirado o n raiz de um (sub)rvore
Remoo na ABB
Caso o n a ser removido seja encontrado, existem 3 possibilidades:

1) O n a ser removido um n folha (que no tem filhos)

Basta liberar a memria alocada pelo elemento e ter como valor de retorno a raiz
atualizada, que passa a ser NULL

2) O n a ser removido possui um nico filho

Ao retirar o n, o elemento da rvore passa a ser o nico filho existente


Remoo - n possui nico filho (Caso 2)

6 6

2 8 Removendo n 4 2 8

1 4 1 4

3 3
Remoo - n possui 2 filhos (Caso 3)
Encontra-se o elemento que precede o n na ordenao. Equivale a encontrar o
elemento mais direita da subrvore esquerda.

Troca-se a informao do elemento com a informao do n encontrado

Retira-se da subrvore esquerda o n encontrado, que contm a informao da


raiz que se deseja retirar

A retirada do n mais direita trivial, uma vez que este n folha ou um n com
um nico filho (o n da direita nunca existe)
Remoo - n possui 2 filhos (Caso 3)
O procedimento descrito deve ser seguido para no violar a ordenao da rvore

A operao feita com o n mais direita da subrvore esquerda

Pode ser feita com n mais esquerda da subrvore direita.


Remoo - n possui 2 filhos (Caso 3)
6 4 4

2 8 2 8 2 8

1 4 1 6 1 6

3 3 3

Troca 6 com 4 Troca 6 com 4 Retira o n 6


Cdigo remoo
Cdigo remoo - N sem filhos
Cdigo remoo - N com filho direita
Cdigo remoo - N com filho esquerda
Cdigo remoo - N possui os dois filhos
Exerccios
1) Implemente as funes bsicas de construo da rvore de busca binria
(ABB), recebendo os valores do usurio:

44, 9, 77, 6, 11, 43, 22, 99, 21,37

2) Insira os nmeros 77, 34, 28, 71, 32, 43, 23, 11, 3 em uma lista encadeada,
utilize ABB para criar uma nova lista encadeada que armazene os nmeros
ordenadamente.

Você também pode gostar