Você está na página 1de 6

3

1 7

2 5

4 6

Figure 1: T

PROJETO E ANÁLISE DE ALGORITMOS


Dúvidas árvores binárias de busca

Exemplo i:
Utilizar o Algoritmo 4.1 para fazer uma busca na árvore binária de busca T da Figura 2 para
valores de chave x = 5, x = 0 e x = 8. Determinar os valores de f e pt1 para cada valor de x no
final da execução do algoritmo.

O Algoritmo 4.1 tem por saı́da a variável f que informa o resultado da busca:
f = 0 ⇒ árvore vazia.
f = 1 ⇒ x ∈ S = {s1 , ..., sn } busca com sucesso, pt indica o endereço de memória no qual se
encontra armazenada a chave x.
f = 2, 3 ⇒ x 6∈ S = {s1 , ..., sn } busca sen sucesso.

Algoritmo 4.1: BUSCA EM ARVORE BINARIA DE BUSCA

procedimento busca-arvore(x, pt, f )


se pt = λ então f = 0
senão se x = pt ↑ .chave então f = 1
senão se x < pt ↑ .chave então
se pt ↑ .esq = λ então f = 2
senão pt = pt ↑ .esq
busca-arvore(x, pt, f )
senão se pt ↑ .dir = λ então f = 3
senão pt = pt ↑ .dir
busca-arvore(x, pt, f )

pt = ptraiz; busca-arvore(x, pt, f )

1
ptraiz
&
10
5|3|20
5 20
λ|1|15 3|7|λ
15 3
λ|2|λ 13|5|17
13 17
λ|4|λ λ|6|λ

Figure 2: Árvore binária de busca T em alocação encadeada de memória (cada nó da


árvore armazenado do endereço de memória pt contem 3 campos: esq, chave, dir)

Usaremos o Algoritmo 4.1 com entrada x = 5 e pt = ptraiz para a árvore binária de busca
em alocação encadeada de memória da Figura 2.

pt = ptraiz = 10; x = 5
busca-arvore(x, pt, f )
pt = 10 6= λ
5 = x = pt ↑ .chave = 3?, nao
5 = x < pt ↑ .chave = 3?, nao
5 = x > pt ↑ .chave = 3?, sim
pt = pt ↑ .dir = 20
busca-arvore (5, 20, f )
pt = 20 6= λ
5 = x = pt ↑ .chave = 7?, nao
5 = x < pt ↑ .chave = 7?, sim
pt = pt ↑ .esq = 3
busca-arvore (5, 3, f )
pt = 3 6= λ
5 = x = pt ↑ .chave = 7?, sim então f = 1

Depois de aplicar o Algoritmo 4.1 com entrada x = 5 e pt = ptraiz para a árvore binária de
busca em alocação encadeada de memória da Figura 2, obtemos a saı́da pt = 3 (último endereço
de memória atingido pelo algoritmo) e f = 1 (busca com sucesso). Portanto existe chave x = 5
na árvore da Figura 2 e se encontra no endereço de memória dado por pt, igual a 3 neste caso.

Usaremos o Algoritmo 4.1 com entrada x = 0 e pt = ptraiz para a árvore binária de busca
em alocação encadeada de memória da Figura 2.

pt = ptraiz = 10; x = 0

2
busca-arvore(x, pt, f )
pt = 10 6= λ
0 = x = pt ↑ .chave = 3?, nao
0 = x < pt ↑ .chave = 3?, sim
pt = pt ↑ .esq = 5
busca-arvore (0, 5, f )
pt = 5 6= λ
0 = x = pt ↑ .chave = 1?, nao
0 = x < pt ↑ .chave = 1?, sim
pt = pt ↑ .esq = λ? sim então f = 2

Depois de aplicar o Algoritmo 4.1 com entrada x = 0 e pt = ptraiz para a árvore binária de
busca em alocação encadeada de memória da Figura 2, obtemos a saı́da pt = 5 (último endereço
de memória atingido pela busca) e f = 2 (busca sem sucesso e a chave x poderia ser inserida
como raiz da subárvore esquerda da raiz, alocada no endereço de memória pt, igual a 5 neste
caso) .

Usaremos o Algoritmo 4.1 com entrada x = 8 e pt = ptraiz para a árvore binária de busca
em alocação encadeada de memória da Figura 2.

pt = ptraiz = 10; x = 0
busca-arvore(x, pt, f )
pt = 10 6= λ
8 = x = pt ↑ .chave = 3?, nao
8 = x < pt ↑ .chave = 3?, nao
8 = x > pt ↑ .chave = 3?, sim
pt = pt ↑ .dir = 20
busca-arvore (8, 20, f )
pt = 20 6= λ
8 = x = pt ↑ .chave = 7?, nao
8 = x < pt ↑ .chave = 7?, nao
8 = x > pt ↑ .chave = 7?, sim
pt ↑ .dir = λ? sim então f = 3

Depois de aplicar o Algoritmo 4.1 com entrada x = 8 e pt = ptraiz para a árvore binária de
busca em alocaç ao encadeada de memória da Figura 2, obtemos a saı́da pt = 20 (último endereço
de memória atingido pela busca) e f = 3 (busca sem sucesso e a chave x poderia ser inserida
como raiz da subárvore direita da raiz alocada no endereço de memória pt, igual a 20 neste caso).

3
Exercı́cio ii:
Utilizar o Algoritmo 4.2 para fazer uma inserção na árvore binária de busca da Figura 2 para
valores de chave x = 5, x = 0 e x = 8. Mostrar a árvore ao final da inserção em cada caso.

Algoritmo 4.2: INSERAO EM ARVORE BINARIA DE BUSCA

pt = ptraiz; busca-arvore(x, pt, f )


se f = 1 então ”inserao invalida”
senão ocupar(pt1)
ptq ↑ .chave = x; pt1 ↑ .inf o = novo − valor
pt1 ↑ .esq = λ; pt1 ↑ .dir = λ
se f = 0 então ptraiz = pt1
senão se f = 2 então
pt ↑ .esq = pt1
senão pt ↑ .dir = pt1

Usaremos o Algoritmo 4.2 com entrada x = 5 e pt = ptraiz para a árvore binária de busca
em alocação encadeada de memória da Figura 2.

pt = ptraiz = 10; x = 5
busca-arvore(x, pt, f )
obtemos pt = 3 e f = 1
f = 1? sim então ”inserção invalida”

Depois de aplicar o Algoritmo 4.2 na na árvore binária de busca da Figura 2, a inserção não
é possı́vel pois já existe chave x = 5 no endereço de memória pt = 3. A árvore da Figura 2 não
muda.

Usaremos o Algoritmo 4.2 com entrada x = 0 e pt = ptraiz para a árvore binária de busca
em alocação encadeada de memória da Figura 2.

pt = ptraiz = 10; x = 0
busca-arvore(x, pt, f )
obtemos pt = 5 e f = 2
f = 1? nao então ocupar(pt1) % pt1 = 22
pt1 ↑ .chave = 0; pt1 ↑ .inf o = novo (se existir outra informação)
pt1 ↑ .esq = λ; pt1 ↑ .dir = λ
f = 2 ? sim então pt ↑ .esq = pt1 = 22

Depois de aplicar o Algoritmo 4.2 na na árvore binária de busca da Figura 2, foi inserido
um novo nó no endereço de memória pt = 22 com chave x = 0, o novo nó é raiz da subárvore

4
ptraiz
&
10
5|3|20
5 20
22 6 λ|1|15 3|7|λ
22 15 3
λ|0|λ λ|2|λ 13|5|17
13 17
λ|4|λ λ|6|λ

Figure 3: Árvore binária de busca resultante da inserção do nó com chave x = 0 em T2

esquerda da subárvore com raiz em pt = 5. A Figura 3 mostra a árvore obtida depois da inserção
do novo nó com chave x = 0.

Usaremos o Algoritmo 4.2 com entrada x = 8 e pt = ptraiz para a árvore binária de busca
em alocação encadeada de memória da Figura 2.

pt = ptraiz = 10; x = 8
busca-arvore(x, pt, f )
obtemos pt = 20 e f = 3
f = 1? nao então ocupar(pt1) % pt1 = 28
pt1 ↑ .chave = 8; pt1 ↑ .inf o = novo (se existir outra informação)
pt1 ↑ .esq = λ; pt1 ↑ .dir = λ
f = 2? nao
f = 3 ? sim então pt ↑ .dir = pt1 = 28

Depois de aplicar o Algoritmo 4.2 na na árvore binária de busca da Figura 2, foi inserido
um novo nó no endereço de memória pt = 28 com chave x = 8, o novo nó é raiz da subárvore
direita da subárvore com raiz em pt = 20.A Figura 4 mostra a árvore obtida depois da inserção
do novo nó com chave x = 8.

5
ptraiz
&
10
5|3|20
5 20
λ|1|15 3|7| 6 λ28
15 3 28
λ|2|λ 13|5|17 λ|8|λ
13 17
λ|4|λ λ|6|λ

Figure 4: Árvore binária de busca resultante da inserção do nó com chave x = 8 em T2

Você também pode gostar