Você está na página 1de 6

rvore Binria de Busca

Propriedades
Se y est na subrvore esquerda de x ento
chave(y) chave(x)
Se y est na subrvore direitaa de x ento
chave(y) chave(x)

Aula 13
rvores de Busca Balanceadas
Stefanes
Prof. Marco Aurelio
marco em dct.ufms.br
www.dct.ufms.br/ marco

7
8

Aula 13 p. 1

Aula 13 p. 3

rvore Binria de Busca

Operaes Busca e Sucessor

Objetivo: Implementar operaes de Busca, Incluso,


Remoo, Mnimo/Mximo e Predecessor/Sucessor em um
conjunto de dados

Busca(T, k )
Comece na raiz e compare k com a chave do n corrente x
1. Se a chave encontrada pare
2. Se a k < chave(x) busque na subrvore esquerda de x

Representao da rvore binria


Estrutura Ligada

3. Se a k > chave(x) busque na subrvore direita de x


Sucessor(x): maior elemento menor que chave(x)
Caso 1 dir(x) 6= NULO
sucessor o mnino na subrvore direita de x

chavedados pai
esq

Caso 2 dir(x) = NULO


Sucessor primeiro n direita subindo pelos
ancestrais de x

dir

Aula 13 p. 2

Aula 13 p. 4

Exemplo de um rvore RN

Operaes na rvore Binria de Busca


Complexidade das operaes

26

Busca O(h)
Incluso O(h)

17

Remoo O(h)

41
NIL

Mnimo O(h)

30

14

Mximo O(h)

NIL

NIL

47

NIL

NIL

Predecessor O(h)

53

38

Sucessor O(h)

NIL

Uma rvore Binria de Busca


Balanceada se h = O(lg n)

NIL

NIL

NIL

NIL[T]: Sentinela para todas as folhas e pai da raiz

Aula 13 p. 5

Aula 13 p. 7

Lema

rvore Rubro-Negra
Variao da rvore binria de busca (balanceada)

Def.: a altura negra de um n x, hn (x) o nmero de ns


negros de um caminho at uma folha descendente
encluindo-se x.
Uma subrvore com raiz em um n x tem pelo
Afirmacao
menos 2hn (x) 1 ns internos
Prova: Induo em h(x)
Base: h(x) = 0 x folha hn (x) = 0 e 20 1 = 0 ns
internos na subrvore
PI: h(x) > 0. A altura negra de cada filho de x hn (x) ou
hn (x) 1, mas a altura de cada um de seus filhos menor
que h(x). Portanto usando a HI, o nmero de ns internos
na subrvore com raiz x pelo menos
2.(2hn (x)1 1) + 1 = 2hn (x) 1.

Cada n possui um campo adicional: a cor do n, que


pode ser rubro ou negro
Operaes tomam O(lgn) no pior caso
Propiedades de rvores Rubro-Negras
1. Cada n rubro ou negro
2. A raiz negra
3. Cada folha (NIL) negra
4. Se um n rubro seus dois filhos so negros
5. Todo caminho de um n at uma folha contm o
mesmo nmero de ns negros
Aula 13 p. 6

Aula 13 p. 8

Lema

Rotao_Esq(T, x)

Qualquer rvore RN com n ns internos tem altura


2 lg(n + 1).

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:

Lema

Prova: Seja h a altura da rvore RN. Pela Prop. 4 a altura


negra da rvore pelo menos h/2. Portanto, pela
Afirmao temos n 2h/2 1 h = 2 lg(n + 1) 1
Portanto a rvore RN balanceada
Como executar as operaes de Incluso e Remoo
sem alterar as propriedades?

y = Dir[x]
Dir[x] = Esq[y]
if Esq[y] 6= N IL then
p[Esq[y]] = x
p[y] = p[x]
if p[x] = N IL then
root[T ] = y
else
if x = Esq[p[y]] then
Esq[p[y]] = y
else
Dir[p[y]] = y
Esq[y] = x
p[x] = y

Aula 13 p. 9

Aula 13 p. 11

Rotaes

Incluso na rvore Rubro-Negra

H dois tipos de rotao para reestruturar a rvore:


Esquerda e Direita
Hiptese para uma rotao esquerda em um n x
Pai da raiz NIL
Filho direito y de x no NIL

Idia

Devemos subir na rvore at restaurar as propriedades.


Olharemos para dois ns, em especial:
Notao:
x n rubro
y tio de x

Rotao_Dir(T, y )
x

2. Pinte o n de vermelho
3. Restaure as propriedades rubro-negras

Rotao_Esq(T, x)

1. Insira um n z como em uma rvore binria de busca


normal

Aula 13 p. 10

Aula 13 p. 12

Incluso na rvore Rubro-Negra

Incluso na rvore Rubro-Negra

Caso 1: Se y rubro
cor[y]=negro
cor[p[x]]=negro
cor[p[p[x]]]=rubro

Caso 3: y negro e x filho esquerdo


cor[p[x]] =negro
cor[p[p[x]]] =rubro
Rotao_Dir(T, p[p[x]])
11

11
y

14

14

15

15

4
Aula 13 p. 13

Incluso na rvore Rubro-Negra

Aula 13 p. 13

Incluso na rvore Rubro-Negra

Caso 2: Se y negro
x filho direito
x = p[x]
Rotao_Esq(T, x)
11

7
y

14

11

x
1

15

14

15

4
Aula 13 p. 13

Aula 13 p. 13

Insere_RN(T, x)
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:

Remoo na rvore Rubro-Negra

Insere(T, x)
cor[x] = rubro
while x 6= root[T ] e cor[p[x]] = rubro do
if p[x] = Esq[p[p[x]]] then
y = Dir[p[p[x]]]
if cor[y] = rubro then
cor[p[x]] = negro
 Caso 1
cor[y] = negro
cor[p[p[x]]] =rubro
x = p[p[x]]
else
if x = Dir[p[x]] then
x = p[x]
 Caso 2
Rotacao_Esq(T, x)
cor[p[x]] = negro q  Caso 3
cor[p[p[x]]] = rubro
Rotacao_Dir(T, p[p[x]])
else
simtrico ao anterior
cor[root[T ]] = negro

Qual a cor do n a ser deletado? rubro?


1. Todo n rubro ou negro. Ok!
2. A raiz negra. Ok!
3. Toda folha negra. Ok!
4. Se um n rubro, seus dois filhos so negros
No criamos dois ns rubros seguidos. Ok!
5. Para cada n, todo caminho descendente de uma folha
tem o mesmo nmero de ns negros.
No mudamos nenhuma altura negra. Ok!

Aula 13 p. 14

Anlise da Insero

Aula 13 p. 16

Remoo na rvore Rubro-Negra

Inserir um novo n na rvore: O(lgn)

Qual a cor do n a ser deletado? negro?

Restaurar propriedades
O lao se repete se somente o Caso 1 executado
Caso 2 seguido sempre do Caso 3
Caso 3 resolve o problema
O nmero de vezes que o lao executado O(lg n)
Tempo total O(lg n)

1. Todo n rubro ou negro. Ok!


2. A raiz negra.
Se removermos a raiz seu substituto pode ser rubro
3. Toda folha negra. Ok!
4. Se um n rubro, seus dois filhos so negros
Podemos criar dois ns rubros seguidos.
5. Para cada n, todo caminho descendente de uma folha
tem o mesmo nmero de ns negros.
Podemos mudar alguma altura negra.

Aula 13 p. 15

Aula 13 p. 17

Remoo na rvore Rubro-Negra


1. Qual a cor do n a z ser deletado? negro
2. Troque z pelo seus sucessor y
3. Remove y
Idia:
1. Passar a cor de y para seu filho x. Viola a Prop. 1, pois
x tem duas cores
2. Mover negro extra para cima
at encontrar um rubro ou at atingir a raiz
fazer rotaes quando necessrias
x sempre aponta para n duplo negro
Complexidade: O(lgn)
Aula 13 p. 18