Árvores vla -...
TRANSCRIPT
Árvores AVL
Letícia Rodrigues Bueno
13 de junho de 2013
Relembrando: árvores binárias de busca
I Objetivo: minimizar tempo de acesso no pior caso.
I Idéia: Para cada chave, separe as restantes em maiores oumenores.
I Estrutura hierárquica com divisão binária: uma árvore binária.
3
1 6
2 4 7
5
Relembrando: árvores binárias de busca
I Objetivo: minimizar tempo de acesso no pior caso.I Idéia: Para cada chave, separe as restantes em maiores ou
menores.
I Estrutura hierárquica com divisão binária: uma árvore binária.
3
1 6
2 4 7
5
Relembrando: árvores binárias de busca
I Objetivo: minimizar tempo de acesso no pior caso.I Idéia: Para cada chave, separe as restantes em maiores ou
menores.I Estrutura hierárquica com divisão binária: uma árvore binária.
3
1 6
2 4 7
5
Relembrando: árvores binárias de busca
I Objetivo: minimizar tempo de acesso no pior caso.I Idéia: Para cada chave, separe as restantes em maiores ou
menores.I Estrutura hierárquica com divisão binária: uma árvore binária.
3
1 6
2 4 7
5
Relembrando: complexidade da busca em árvore binária
I Busca em árvore binária = caminho da raiz até chave desejada(ou até uma folha, caso chave não exista).
3
1 6
2 4 7
5
h
I Pior caso: maior caminho da raiz até folha = altura da árvoreI Complexidade pior caso: O(h) (como otimizar pior caso?)
Relembrando: complexidade da busca em árvore binária
I Busca em árvore binária = caminho da raiz até chave desejada(ou até uma folha, caso chave não exista).
3
1 6
2 4 7
5
h
I Pior caso: maior caminho da raiz até folha
= altura da árvoreI Complexidade pior caso: O(h) (como otimizar pior caso?)
Relembrando: complexidade da busca em árvore binária
I Busca em árvore binária = caminho da raiz até chave desejada(ou até uma folha, caso chave não exista).
3
1 6
2 4 7
5
h
I Pior caso: maior caminho da raiz até folha = altura da árvore
I Complexidade pior caso: O(h) (como otimizar pior caso?)
Relembrando: complexidade da busca em árvore binária
I Busca em árvore binária = caminho da raiz até chave desejada(ou até uma folha, caso chave não exista).
3
1 6
2 4 7
5
h
I Pior caso: maior caminho da raiz até folha = altura da árvoreI Complexidade pior caso: O(h)
(como otimizar pior caso?)
Relembrando: complexidade da busca em árvore binária
I Busca em árvore binária = caminho da raiz até chave desejada(ou até uma folha, caso chave não exista).
3
1 6
2 4 7
5
h
I Pior caso: maior caminho da raiz até folha = altura da árvoreI Complexidade pior caso: O(h) (como otimizar pior caso?)
Relembrando: árvore binária de busca ótima
I Árvore ótima: minimiza tempo de busca (no pior caso)
I Árvore completa, altura: h = blog nc+ 1
4
2 6
3 5 71
I complexidade temporal no pior caso: O(log n)
Relembrando: árvore binária de busca ótima
I Árvore ótima: minimiza tempo de busca (no pior caso)I Árvore completa, altura: h = blog nc+ 1
4
2 6
3 5 71
I complexidade temporal no pior caso: O(log n)
Relembrando: árvore binária de busca ótima
I Árvore ótima: minimiza tempo de busca (no pior caso)I Árvore completa, altura: h = blog nc+ 1
4
2 6
3 5 71
I complexidade temporal no pior caso: O(log n)
Relembrando: construção de árvore ótima
I após inserções, árvore binária de busca pode degenerar emuma lista
1
5
2
3
4
7
6
I tempo de busca pior caso: O(n)
Relembrando: construção de árvore ótima
I Estrutura �xa: chaves pré-determinadas.
I Dado um conjunto com n chaves, é possível construir a árvoreótima em tempo O(n3) (ou O(n2) se usarmos um algoritmomais elaborado).
I Para manter a árvore ótima, deveríamos executar o algoritmo acada inserção: impraticável!
I Podemos manter complexidade de pior caso da inserção emO(log n)?
Árvores �su�cientemente boas�
I Árvore com altura 2 log n, complexidade temporal no pior casoO(. . .)
I Árvore com altura c1 log n + c2, complexidade temporal no piorcaso
I Nem toda árvore com altura O(log n) é ótima, mas acomplexidade assintótica temporal de pior caso para a busca éigual à de uma árvore ótima.
De�nição: Árvore binária balanceada é aquela com altura O(log n)
Mais fácil de construir que árvore ótima?Como garantir que uma árvore binária é balanceada?
Árvores �su�cientemente boas�
I Árvore com altura 2 log n, complexidade temporal no pior casoO(log n)
I Árvore com altura c1 log n + c2, complexidade temporal no piorcaso
I Nem toda árvore com altura O(log n) é ótima, mas acomplexidade assintótica temporal de pior caso para a busca éigual à de uma árvore ótima.
De�nição: Árvore binária balanceada é aquela com altura O(log n)
Mais fácil de construir que árvore ótima?Como garantir que uma árvore binária é balanceada?
Árvores �su�cientemente boas�
I Árvore com altura 2 log n, complexidade temporal no pior casoO(log n)
I Árvore com altura c1 log n + c2, complexidade temporal no piorcaso O(. . .)
I Nem toda árvore com altura O(log n) é ótima, mas acomplexidade assintótica temporal de pior caso para a busca éigual à de uma árvore ótima.
De�nição: Árvore binária balanceada é aquela com altura O(log n)
Mais fácil de construir que árvore ótima?Como garantir que uma árvore binária é balanceada?
Árvores �su�cientemente boas�
I Árvore com altura 2 log n, complexidade temporal no pior casoO(log n)
I Árvore com altura c1 log n + c2, complexidade temporal no piorcaso O(log n)
I Nem toda árvore com altura O(log n) é ótima, mas acomplexidade assintótica temporal de pior caso para a busca éigual à de uma árvore ótima.
De�nição: Árvore binária balanceada é aquela com altura O(log n)
Mais fácil de construir que árvore ótima?Como garantir que uma árvore binária é balanceada?
Árvores �su�cientemente boas�
I Árvore com altura 2 log n, complexidade temporal no pior casoO(log n)
I Árvore com altura c1 log n + c2, complexidade temporal no piorcaso O(log n)
I Nem toda árvore com altura O(log n) é ótima, mas acomplexidade assintótica temporal de pior caso para a busca éigual à de uma árvore ótima.
De�nição: Árvore binária balanceada é aquela com altura O(log n)
Mais fácil de construir que árvore ótima?Como garantir que uma árvore binária é balanceada?
Árvores �su�cientemente boas�
I Árvore com altura 2 log n, complexidade temporal no pior casoO(log n)
I Árvore com altura c1 log n + c2, complexidade temporal no piorcaso O(log n)
I Nem toda árvore com altura O(log n) é ótima, mas acomplexidade assintótica temporal de pior caso para a busca éigual à de uma árvore ótima.
De�nição: Árvore binária balanceada é aquela com altura O(log n)
Mais fácil de construir que árvore ótima?Como garantir que uma árvore binária é balanceada?
Árvores �su�cientemente boas�
I Árvore com altura 2 log n, complexidade temporal no pior casoO(log n)
I Árvore com altura c1 log n + c2, complexidade temporal no piorcaso O(log n)
I Nem toda árvore com altura O(log n) é ótima, mas acomplexidade assintótica temporal de pior caso para a busca éigual à de uma árvore ótima.
De�nição: Árvore binária balanceada é aquela com altura O(log n)
Mais fácil de construir que árvore ótima?Como garantir que uma árvore binária é balanceada?
Árvores AVL
Para cada nó x , de�na:I hE (x): altura sub-árvore à esquerdaI hD(x): altura sub-árvore à direita
hE hD
I Propriedade AVL: |hE (x)− hD(x)| ≤ 1I Nó regulado: satisfaz propriedade AVL.I Árvore AVL: todos nós regulados.
(Curiosidade: AVL = Adelson-Velskii, G. e Landis, E. M.)
Árvores AVL
Para cada nó x , de�na:I hE (x): altura sub-árvore à esquerdaI hD(x): altura sub-árvore à direita
hE hD
I Propriedade AVL: |hE (x)− hD(x)| ≤ 1
I Nó regulado: satisfaz propriedade AVL.I Árvore AVL: todos nós regulados.
(Curiosidade: AVL = Adelson-Velskii, G. e Landis, E. M.)
Árvores AVL
Para cada nó x , de�na:I hE (x): altura sub-árvore à esquerdaI hD(x): altura sub-árvore à direita
hE hD
I Propriedade AVL: |hE (x)− hD(x)| ≤ 1I Nó regulado: satisfaz propriedade AVL.
I Árvore AVL: todos nós regulados.
(Curiosidade: AVL = Adelson-Velskii, G. e Landis, E. M.)
Árvores AVL
Para cada nó x , de�na:I hE (x): altura sub-árvore à esquerdaI hD(x): altura sub-árvore à direita
hE hD
I Propriedade AVL: |hE (x)− hD(x)| ≤ 1I Nó regulado: satisfaz propriedade AVL.I Árvore AVL: todos nós regulados.
(Curiosidade: AVL = Adelson-Velskii, G. e Landis, E. M.)
Árvores AVL
Para cada nó x , de�na:I hE (x): altura sub-árvore à esquerdaI hD(x): altura sub-árvore à direita
hE hD
I Propriedade AVL: |hE (x)− hD(x)| ≤ 1I Nó regulado: satisfaz propriedade AVL.I Árvore AVL: todos nós regulados.
(Curiosidade: AVL = Adelson-Velskii, G. e Landis, E. M.)
Árvores AVL: exemplo
3
1 6
2 4 7
5
3
1 6
2 4
5
AVL NÃO AVL
Árvores AVL são balanceadas
Intuitivamente: diferença pequena de altura entre sub-árvores⇒ nós se distribuem mais uniformemente.
Provaremos: Toda árvore AVL é balanceada.(Mas cuidado: nem toda árvore balanceada é AVL.)
Demonstração: Th árvore AVL com altura h e mínimo de nós,|Th| número de nós
I h = 0, então |Th| = 0 (árvore vazia)I h = 1, então |Th| = 1 (só a raiz)I h = 2, então |Th| = 2 (raiz mais um nó)I Generalizar para h > 1...
Árvores AVL são balanceadas
Intuitivamente: diferença pequena de altura entre sub-árvores⇒ nós se distribuem mais uniformemente.
Provaremos: Toda árvore AVL é balanceada.
(Mas cuidado: nem toda árvore balanceada é AVL.)
Demonstração: Th árvore AVL com altura h e mínimo de nós,|Th| número de nós
I h = 0, então |Th| = 0 (árvore vazia)I h = 1, então |Th| = 1 (só a raiz)I h = 2, então |Th| = 2 (raiz mais um nó)I Generalizar para h > 1...
Árvores AVL são balanceadas
Intuitivamente: diferença pequena de altura entre sub-árvores⇒ nós se distribuem mais uniformemente.
Provaremos: Toda árvore AVL é balanceada.(Mas cuidado: nem toda árvore balanceada é AVL.)
Demonstração: Th árvore AVL com altura h e mínimo de nós,|Th| número de nós
I h = 0, então |Th| = 0 (árvore vazia)I h = 1, então |Th| = 1 (só a raiz)I h = 2, então |Th| = 2 (raiz mais um nó)I Generalizar para h > 1...
Árvores AVL são balanceadas
Intuitivamente: diferença pequena de altura entre sub-árvores⇒ nós se distribuem mais uniformemente.
Provaremos: Toda árvore AVL é balanceada.(Mas cuidado: nem toda árvore balanceada é AVL.)
Demonstração: Th árvore AVL com altura h e mínimo de nós,|Th| número de nós
I h = 0, então |Th| = 0 (árvore vazia)I h = 1, então |Th| = 1 (só a raiz)I h = 2, então |Th| = 2 (raiz mais um nó)I Generalizar para h > 1...
Árvores AVL são balanceadas
Intuitivamente: diferença pequena de altura entre sub-árvores⇒ nós se distribuem mais uniformemente.
Provaremos: Toda árvore AVL é balanceada.(Mas cuidado: nem toda árvore balanceada é AVL.)
Demonstração: Th árvore AVL com altura h e mínimo de nós,|Th| número de nós
I h = 0, então |Th| = 0 (árvore vazia)
I h = 1, então |Th| = 1 (só a raiz)I h = 2, então |Th| = 2 (raiz mais um nó)I Generalizar para h > 1...
Árvores AVL são balanceadas
Intuitivamente: diferença pequena de altura entre sub-árvores⇒ nós se distribuem mais uniformemente.
Provaremos: Toda árvore AVL é balanceada.(Mas cuidado: nem toda árvore balanceada é AVL.)
Demonstração: Th árvore AVL com altura h e mínimo de nós,|Th| número de nós
I h = 0, então |Th| = 0 (árvore vazia)I h = 1, então |Th| = 1 (só a raiz)
I h = 2, então |Th| = 2 (raiz mais um nó)I Generalizar para h > 1...
Árvores AVL são balanceadas
Intuitivamente: diferença pequena de altura entre sub-árvores⇒ nós se distribuem mais uniformemente.
Provaremos: Toda árvore AVL é balanceada.(Mas cuidado: nem toda árvore balanceada é AVL.)
Demonstração: Th árvore AVL com altura h e mínimo de nós,|Th| número de nós
I h = 0, então |Th| = 0 (árvore vazia)I h = 1, então |Th| = 1 (só a raiz)I h = 2, então |Th| = 2 (raiz mais um nó)
I Generalizar para h > 1...
Árvores AVL são balanceadas
Intuitivamente: diferença pequena de altura entre sub-árvores⇒ nós se distribuem mais uniformemente.
Provaremos: Toda árvore AVL é balanceada.(Mas cuidado: nem toda árvore balanceada é AVL.)
Demonstração: Th árvore AVL com altura h e mínimo de nós,|Th| número de nós
I h = 0, então |Th| = 0 (árvore vazia)I h = 1, então |Th| = 1 (só a raiz)I h = 2, então |Th| = 2 (raiz mais um nó)I Generalizar para h > 1...
Árvores AVL são balanceadas
(continuação da demonstração)
I Generalizando para h > 1.
r
Th−1Th−2
Th
I Mínimo de nós com altura h: raiz ∪
Th−1 ∪ Th−2I Fórmula geral: |Th| = 1 + |Th−1|+ |Th−2|
Árvores AVL são balanceadas
(continuação da demonstração)
I Generalizando para h > 1.
r
Th−1Th−2
Th
I Mínimo de nós com altura h: raiz ∪ Th−1 ∪
Th−2I Fórmula geral: |Th| = 1 + |Th−1|+ |Th−2|
Árvores AVL são balanceadas
(continuação da demonstração)
I Generalizando para h > 1.
r
Th−1Th−2
Th
I Mínimo de nós com altura h: raiz ∪ Th−1 ∪ Th−2
I Fórmula geral: |Th| = 1 + |Th−1|+ |Th−2|
Árvores AVL são balanceadas
(continuação da demonstração)
I Generalizando para h > 1.
r
Th−1Th−2
Th
I Mínimo de nós com altura h: raiz ∪ Th−1 ∪ Th−2I Fórmula geral: |Th| = 1 +
|Th−1|+ |Th−2|
Árvores AVL são balanceadas
(continuação da demonstração)
I Generalizando para h > 1.
r
Th−1Th−2
Th
I Mínimo de nós com altura h: raiz ∪ Th−1 ∪ Th−2I Fórmula geral: |Th| = 1 + |Th−1|+
|Th−2|
Árvores AVL são balanceadas
(continuação da demonstração)
I Generalizando para h > 1.
r
Th−1Th−2
Th
I Mínimo de nós com altura h: raiz ∪ Th−1 ∪ Th−2I Fórmula geral: |Th| = 1 + |Th−1|+ |Th−2|
Árvores AVL são balanceadas
(continuação da demonstração)Fórmula recursiva para |Th|:
|Th| =
0 h = 01 h = 1
1 + |Th−1|+ |Th−2| h > 1
Esta fórmula é muito similar a uma sequência muito conhecida.h-ésimo número de Fibonacci, Fh:
Fh =
0 h = 01 h = 1
Fh−1 + Fh−2 h > 1
Veja que: |Th| > Fh.O que ganhamos com isto?
Árvores AVL são balanceadas
(continuação da demonstração)Fórmula recursiva para |Th|:
|Th| =
0 h = 01 h = 1
1 + |Th−1|+ |Th−2| h > 1
Esta fórmula é muito similar a uma sequência muito conhecida.
h-ésimo número de Fibonacci, Fh:
Fh =
0 h = 01 h = 1
Fh−1 + Fh−2 h > 1
Veja que: |Th| > Fh.O que ganhamos com isto?
Árvores AVL são balanceadas
(continuação da demonstração)Fórmula recursiva para |Th|:
|Th| =
0 h = 01 h = 1
1 + |Th−1|+ |Th−2| h > 1
Esta fórmula é muito similar a uma sequência muito conhecida.h-ésimo número de Fibonacci, Fh:
Fh =
0 h = 01 h = 1
Fh−1 + Fh−2 h > 1
Veja que: |Th| > Fh.O que ganhamos com isto?
Árvores AVL são balanceadas
(continuação da demonstração)Fórmula recursiva para |Th|:
|Th| =
0 h = 01 h = 1
1 + |Th−1|+ |Th−2| h > 1
Esta fórmula é muito similar a uma sequência muito conhecida.h-ésimo número de Fibonacci, Fh:
Fh =
0 h = 01 h = 1
Fh−1 + Fh−2 h > 1
Veja que: |Th| > Fh.O que ganhamos com isto?
Árvores AVL são balanceadas
(continuação da demonstração)Número de nós em árvore AVL: n
≥ |Th| ≥ Fh.Existe fórmula fechada para Fh:
Fh =1√5ah − 1√
5bh
Onde a = 1+√5
2, e b = 1−
√5
2.
Constante b menor que 1: b = −.2763.... Então |bh| < 1.Logo:
n ≥ Fh ≥1√5ah − 1
Lembre-se: queremos h em função de n.
Árvores AVL são balanceadas
(continuação da demonstração)Número de nós em árvore AVL: n ≥ |Th|
≥ Fh.Existe fórmula fechada para Fh:
Fh =1√5ah − 1√
5bh
Onde a = 1+√5
2, e b = 1−
√5
2.
Constante b menor que 1: b = −.2763.... Então |bh| < 1.Logo:
n ≥ Fh ≥1√5ah − 1
Lembre-se: queremos h em função de n.
Árvores AVL são balanceadas
(continuação da demonstração)Número de nós em árvore AVL: n ≥ |Th| ≥ Fh.
Existe fórmula fechada para Fh:
Fh =1√5ah − 1√
5bh
Onde a = 1+√5
2, e b = 1−
√5
2.
Constante b menor que 1: b = −.2763.... Então |bh| < 1.Logo:
n ≥ Fh ≥1√5ah − 1
Lembre-se: queremos h em função de n.
Árvores AVL são balanceadas
(continuação da demonstração)Número de nós em árvore AVL: n ≥ |Th| ≥ Fh.Existe fórmula fechada para Fh:
Fh =1√5ah − 1√
5bh
Onde a = 1+√5
2, e b = 1−
√5
2.
Constante b menor que 1: b = −.2763.... Então |bh| < 1.Logo:
n ≥ Fh ≥1√5ah − 1
Lembre-se: queremos h em função de n.
Árvores AVL são balanceadas
(continuação da demonstração)Número de nós em árvore AVL: n ≥ |Th| ≥ Fh.Existe fórmula fechada para Fh:
Fh =1√5ah − 1√
5bh
Onde a = 1+√5
2, e b = 1−
√5
2.
Constante b menor que 1: b = −.2763.... Então |bh| < 1.Logo:
n ≥ Fh ≥1√5ah − 1
Lembre-se: queremos h em função de n.
Árvores AVL são balanceadas
(continuação da demonstração)Número de nós em árvore AVL: n ≥ |Th| ≥ Fh.Existe fórmula fechada para Fh:
Fh =1√5ah − 1√
5bh
Onde a = 1+√5
2, e b = 1−
√5
2.
Constante b menor que 1: b = −.2763.... Então |bh| < 1.
Logo:
n ≥ Fh ≥1√5ah − 1
Lembre-se: queremos h em função de n.
Árvores AVL são balanceadas
(continuação da demonstração)Número de nós em árvore AVL: n ≥ |Th| ≥ Fh.Existe fórmula fechada para Fh:
Fh =1√5ah − 1√
5bh
Onde a = 1+√5
2, e b = 1−
√5
2.
Constante b menor que 1: b = −.2763.... Então |bh| < 1.Logo:
n ≥ Fh ≥1√5ah − 1
Lembre-se: queremos h em função de n.
Árvores AVL são balanceadas
(continuação da demonstração)Número de nós em árvore AVL: n ≥ |Th| ≥ Fh.Existe fórmula fechada para Fh:
Fh =1√5ah − 1√
5bh
Onde a = 1+√5
2, e b = 1−
√5
2.
Constante b menor que 1: b = −.2763.... Então |bh| < 1.Logo:
n ≥ Fh ≥1√5ah − 1
Lembre-se: queremos h em função de n.
Árvores AVL são balanceadas(continuação da demonstração)
n ≥ 1√5ah − 1
n + 1 ≥ 1√5ah
Use logaritmos:
loga(n + 1) ≥ loga
(1√5ah)
≥ loga1√5
+ loga ah
≥ loga1√5
+ h
Árvores AVL são balanceadas(continuação da demonstração)
n ≥ 1√5ah − 1
n + 1 ≥ 1√5ah
Use logaritmos:
loga(n + 1) ≥ loga
(1√5ah)
≥ loga1√5
+ loga ah
≥ loga1√5
+ h
Árvores AVL são balanceadas(continuação da demonstração)
n ≥ 1√5ah − 1
n + 1 ≥ 1√5ah
Use logaritmos:
loga(n + 1) ≥ loga
(1√5ah)
≥ loga1√5
+ loga ah
≥ loga1√5
+ h
Árvores AVL são balanceadas(continuação da demonstração)
n ≥ 1√5ah − 1
n + 1 ≥ 1√5ah
Use logaritmos:
loga(n + 1) ≥ loga
(1√5ah)
≥ loga1√5
+ loga ah
≥ loga1√5
+ h
Árvores AVL são balanceadas(continuação da demonstração)
n ≥ 1√5ah − 1
n + 1 ≥ 1√5ah
Use logaritmos:
loga(n + 1) ≥ loga
(1√5ah)
≥ loga1√5
+ loga ah
≥ loga1√5
+ h
Árvores AVL são balanceadas
(continuação da demonstração)
Rearranjando loga(n + 1) ≥ loga1√5︸ ︷︷ ︸
c
+h:
h ≤ log2(n + 1)
log2 a+ c
h ∈ O(log n)
Árvores AVL são balanceadas!
Árvores AVL são balanceadas
(continuação da demonstração)
Rearranjando loga(n + 1) ≥ loga1√5︸ ︷︷ ︸
c
+h:
h ≤ log2(n + 1)
log2 a+ c
h ∈ O(log n)
Árvores AVL são balanceadas!
Árvores AVL: inserção
Queremos inserir nova chave:I mantendo a regulagem de todos os nósI em tempo razoável
Nossa estratégia:
1. Inserção como árvore binária comum.
2. veri�car se existem nós desregulados.
3. se existem, tornar os nós regulados.
Árvores AVL: inserção
Queremos inserir nova chave:I mantendo a regulagem de todos os nósI em tempo razoável
Nossa estratégia:
1. Inserção como árvore binária comum.
2. veri�car se existem nós desregulados.
3. se existem, tornar os nós regulados.
Árvores AVL: inserção
Queremos inserir nova chave:I mantendo a regulagem de todos os nósI em tempo razoável
Nossa estratégia:
1. Inserção como árvore binária comum.
2. veri�car se existem nós desregulados.
3. se existem, tornar os nós regulados.
Árvores AVL: inserção
Queremos inserir nova chave:I mantendo a regulagem de todos os nósI em tempo razoável
Nossa estratégia:
1. Inserção como árvore binária comum.
2. veri�car se existem nós desregulados.
3. se existem, tornar os nós regulados.
Árvores AVL: exemplo de inserção
Inserir chave com valor 1 na árvore abaixo.
10
6 15
1773
42
Árvores AVL: exemplo de inserção
Inserir chave com valor 1 na árvore abaixo.
10
6 15
1773
42
1
Árvores AVL: exemplo de inserção
Inserir chave com valor 1 na árvore abaixo.
10
6 15
1773
42
1
Árvores AVL: exemplo de inserção
Inserir chave com valor 1 na árvore abaixo.
10
3 15
1762
41 7
Árvores AVL: exemplo de inserção
Inserir chave com valor 5 na árvore abaixo.
10
6 15
1773
42
Árvores AVL: exemplo de inserção
Inserir chave com valor 5 na árvore abaixo.
10
6 15
1773
42
5
Árvores AVL: exemplo de inserção
Inserir chave com valor 5 na árvore abaixo.
10
6 15
1773
42
5
Árvores AVL: exemplo de inserção
Inserir chave com valor 5 na árvore abaixo.
10
4 15
1763
2 75
Árvores AVL: regulagem dos nós
Generalizando os casos anteriores.
Nó inserido: q
I somente sub-árvores que contém q aumentaram alturaI os nós que �caram desregulados são todos ancestrais de q
Seja p o ancestral de q desregulado mais próximo de q.
I q foi inserido na sub-árvore esquerda de p
I hE (p) > hD(p)
q
p
Árvores AVL: regulagem dos nós
Generalizando os casos anteriores.Nó inserido: q
I somente sub-árvores que contém q aumentaram altura
I os nós que �caram desregulados são todos ancestrais de q
Seja p o ancestral de q desregulado mais próximo de q.
I q foi inserido na sub-árvore esquerda de p
I hE (p) > hD(p)
q
p
Árvores AVL: regulagem dos nós
Generalizando os casos anteriores.Nó inserido: q
I somente sub-árvores que contém q aumentaram alturaI os nós que �caram desregulados são todos ancestrais de q
Seja p o ancestral de q desregulado mais próximo de q.
I q foi inserido na sub-árvore esquerda de p
I hE (p) > hD(p)
q
p
Árvores AVL: regulagem dos nós
Generalizando os casos anteriores.Nó inserido: q
I somente sub-árvores que contém q aumentaram alturaI os nós que �caram desregulados são todos ancestrais de q
Seja p o ancestral de q desregulado mais próximo de q.
I q foi inserido na sub-árvore esquerda de p
I hE (p) > hD(p)
q
p
Árvores AVL: regulagem dos nós
Generalizando os casos anteriores.Nó inserido: q
I somente sub-árvores que contém q aumentaram alturaI os nós que �caram desregulados são todos ancestrais de q
Seja p o ancestral de q desregulado mais próximo de q.
I q foi inserido na sub-árvore esquerda de p
I hE (p) > hD(p)
q
p
Árvores AVL: regulagem dos nós
Generalizando os casos anteriores.Nó inserido: q
I somente sub-árvores que contém q aumentaram alturaI os nós que �caram desregulados são todos ancestrais de q
Seja p o ancestral de q desregulado mais próximo de q.
I q foi inserido na sub-árvore esquerda de p
I hE (p) > hD(p)
q
p
Árvores AVL: regulagem dos nós
I hE (p) > hD(p)
I .
q
p
Árvores AVL: regulagem dos nós
I hE (p) > hD(p)
I .
p
u
Árvores AVL: regulagem dos nós
I hE (p) > hD(p)
I Se hE (u) > hD(u)
p
T1
T2
T3
u
Árvores AVL: regulagem dos nós
I hE (p) > hD(p)
I Se hE (u) > hD(u)
u
T3T2T1
p
Rotação à direita
Árvores AVL: regulagem dos nós
I hE (p) > hD(p)
I Se hE (u) < hD(u)
p
u
Árvores AVL: regulagem dos nós
I hE (p) > hD(p)
I Se hE (u) < hD(u)
p
u
q
T1
T2 T3
T4
Árvores AVL: regulagem dos nós
I hE (p) > hD(p)
I Se hE (u) < hD(u)
q
u p
T1 T2 T3 T4
Rotação dupla à direita
Árvores AVL: exemplo de inserção
E se o nó inserido estiver à direita do nó desregulado?
Inserir 20 na árvore abaixo:
10
6 15
1773
42
Árvores AVL: exemplo de inserção
E se o nó inserido estiver à direita do nó desregulado?Inserir 20 na árvore abaixo:
10
6 15
1773
42 20
Árvores AVL: exemplo de inserção
E se o nó inserido estiver à direita do nó desregulado?Inserir 20 na árvore abaixo:
10
6 15
1773
42 20
Árvores AVL: exemplo de inserção
E se o nó inserido estiver à direita do nó desregulado?Inserir 20 na árvore abaixo:
10
6 17
2073
42
15
Árvores AVL: exemplo de inserção
Inserir 16 na árvore abaixo:
10
6 15
1773
42
Árvores AVL: exemplo de inserção
Inserir 16 na árvore abaixo:
10
6 15
1773
42 16
Árvores AVL: exemplo de inserção
Inserir 16 na árvore abaixo:
10
6 15
1773
42 16
Árvores AVL: exemplo de inserção
Inserir 16 na árvore abaixo:
10
6 16
1773
42
15
Árvores AVL: regulagem de nós
Generalizando os dois casos anteriores.Nó inserido q.Seja p o ancestral de q desregulado mais próximo de q.
I q foi inserido na sub-árvore direita de p
I hD(p) > hE (p)
q
p
Árvores AVL: regulagem de nós
Generalizando os dois casos anteriores.Nó inserido q.Seja p o ancestral de q desregulado mais próximo de q.
I q foi inserido na sub-árvore direita de p
I hD(p) > hE (p)
q
p
Árvores AVL: regulagem de nós
Generalizando os dois casos anteriores.Nó inserido q.Seja p o ancestral de q desregulado mais próximo de q.
I q foi inserido na sub-árvore direita de p
I hD(p) > hE (p)
q
p
Árvores AVL: regulagem dos nós
I hD(p) > hE (p)
I .
q
p
Árvores AVL: regulagem dos nós
I hD(p) > hE (p)
I .
p
u
Árvores AVL: regulagem dos nós
I hD(p) > hE (p)
I Se hE (u) < hD(u)
p
T3
T2
T1
u
Árvores AVL: regulagem dos nós
I hD(p) > hE (p)
I Se hE (u) < hD(u)
u
T1 T2 T3
p
Rotação à esquerda
Árvores AVL: regulagem dos nós
I hD(p) > hE (p)
I Se hE (u) > hD(u)
p
u
Árvores AVL: regulagem dos nós
I hD(p) > hE (p)
I Se hE (u) > hD(u)
p
u
q
T4
T3T2
T1
Árvores AVL: regulagem dos nós
I hD(p) > hE (p)
I Se hE (u) > hD(u)
q
up
T4T3T2T1
Rotação dupla à esquerda
Árvores AVL: regulagem de nós
q nó inserido, p ancestral desregulado, u �lho de p na mesmasubárvore de q.Resumo dos casos:
I Caso 1: hE (p) > hD(p)
I Caso 1.1: hE (u) > hD(u)⇒ rotação direitaI Caso 1.2: hE (u) < hD(u)⇒ rotação dupla direita
I Caso 2: hE (p) < hD(p)I Caso 2.1: hE (u) < hD(u)⇒ rotação esquerdaI Caso 1.2: hE (u) > hD(u)⇒ rotação dupla esquerda
Operação de rotação: O(1) (ajustar ponteiros p.esq, p.dir , u.esq,u.dir).Encontrar p: O(log n) (caminhar de q na direção da raiz)Regular p torna a árvore AVL. Por quê?
Árvores AVL: regulagem de nós
q nó inserido, p ancestral desregulado, u �lho de p na mesmasubárvore de q.Resumo dos casos:
I Caso 1: hE (p) > hD(p)I Caso 1.1: hE (u) > hD(u)⇒ rotação direita
I Caso 1.2: hE (u) < hD(u)⇒ rotação dupla direita
I Caso 2: hE (p) < hD(p)I Caso 2.1: hE (u) < hD(u)⇒ rotação esquerdaI Caso 1.2: hE (u) > hD(u)⇒ rotação dupla esquerda
Operação de rotação: O(1) (ajustar ponteiros p.esq, p.dir , u.esq,u.dir).Encontrar p: O(log n) (caminhar de q na direção da raiz)Regular p torna a árvore AVL. Por quê?
Árvores AVL: regulagem de nós
q nó inserido, p ancestral desregulado, u �lho de p na mesmasubárvore de q.Resumo dos casos:
I Caso 1: hE (p) > hD(p)I Caso 1.1: hE (u) > hD(u)⇒ rotação direitaI Caso 1.2: hE (u) < hD(u)⇒ rotação dupla direita
I Caso 2: hE (p) < hD(p)I Caso 2.1: hE (u) < hD(u)⇒ rotação esquerdaI Caso 1.2: hE (u) > hD(u)⇒ rotação dupla esquerda
Operação de rotação: O(1) (ajustar ponteiros p.esq, p.dir , u.esq,u.dir).Encontrar p: O(log n) (caminhar de q na direção da raiz)Regular p torna a árvore AVL. Por quê?
Árvores AVL: regulagem de nós
q nó inserido, p ancestral desregulado, u �lho de p na mesmasubárvore de q.Resumo dos casos:
I Caso 1: hE (p) > hD(p)I Caso 1.1: hE (u) > hD(u)⇒ rotação direitaI Caso 1.2: hE (u) < hD(u)⇒ rotação dupla direita
I Caso 2: hE (p) < hD(p)
I Caso 2.1: hE (u) < hD(u)⇒ rotação esquerdaI Caso 1.2: hE (u) > hD(u)⇒ rotação dupla esquerda
Operação de rotação: O(1) (ajustar ponteiros p.esq, p.dir , u.esq,u.dir).Encontrar p: O(log n) (caminhar de q na direção da raiz)Regular p torna a árvore AVL. Por quê?
Árvores AVL: regulagem de nós
q nó inserido, p ancestral desregulado, u �lho de p na mesmasubárvore de q.Resumo dos casos:
I Caso 1: hE (p) > hD(p)I Caso 1.1: hE (u) > hD(u)⇒ rotação direitaI Caso 1.2: hE (u) < hD(u)⇒ rotação dupla direita
I Caso 2: hE (p) < hD(p)I Caso 2.1: hE (u) < hD(u)⇒ rotação esquerda
I Caso 1.2: hE (u) > hD(u)⇒ rotação dupla esquerda
Operação de rotação: O(1) (ajustar ponteiros p.esq, p.dir , u.esq,u.dir).Encontrar p: O(log n) (caminhar de q na direção da raiz)Regular p torna a árvore AVL. Por quê?
Árvores AVL: regulagem de nós
q nó inserido, p ancestral desregulado, u �lho de p na mesmasubárvore de q.Resumo dos casos:
I Caso 1: hE (p) > hD(p)I Caso 1.1: hE (u) > hD(u)⇒ rotação direitaI Caso 1.2: hE (u) < hD(u)⇒ rotação dupla direita
I Caso 2: hE (p) < hD(p)I Caso 2.1: hE (u) < hD(u)⇒ rotação esquerdaI Caso 1.2: hE (u) > hD(u)⇒ rotação dupla esquerda
Operação de rotação: O(1) (ajustar ponteiros p.esq, p.dir , u.esq,u.dir).Encontrar p: O(log n) (caminhar de q na direção da raiz)Regular p torna a árvore AVL. Por quê?
Árvores AVL: regulagem de nós
q nó inserido, p ancestral desregulado, u �lho de p na mesmasubárvore de q.Resumo dos casos:
I Caso 1: hE (p) > hD(p)I Caso 1.1: hE (u) > hD(u)⇒ rotação direitaI Caso 1.2: hE (u) < hD(u)⇒ rotação dupla direita
I Caso 2: hE (p) < hD(p)I Caso 2.1: hE (u) < hD(u)⇒ rotação esquerdaI Caso 1.2: hE (u) > hD(u)⇒ rotação dupla esquerda
Operação de rotação: O(1) (ajustar ponteiros p.esq, p.dir , u.esq,u.dir).
Encontrar p: O(log n) (caminhar de q na direção da raiz)Regular p torna a árvore AVL. Por quê?
Árvores AVL: regulagem de nós
q nó inserido, p ancestral desregulado, u �lho de p na mesmasubárvore de q.Resumo dos casos:
I Caso 1: hE (p) > hD(p)I Caso 1.1: hE (u) > hD(u)⇒ rotação direitaI Caso 1.2: hE (u) < hD(u)⇒ rotação dupla direita
I Caso 2: hE (p) < hD(p)I Caso 2.1: hE (u) < hD(u)⇒ rotação esquerdaI Caso 1.2: hE (u) > hD(u)⇒ rotação dupla esquerda
Operação de rotação: O(1) (ajustar ponteiros p.esq, p.dir , u.esq,u.dir).Encontrar p: O(log n) (caminhar de q na direção da raiz)
Regular p torna a árvore AVL. Por quê?
Árvores AVL: regulagem de nós
q nó inserido, p ancestral desregulado, u �lho de p na mesmasubárvore de q.Resumo dos casos:
I Caso 1: hE (p) > hD(p)I Caso 1.1: hE (u) > hD(u)⇒ rotação direitaI Caso 1.2: hE (u) < hD(u)⇒ rotação dupla direita
I Caso 2: hE (p) < hD(p)I Caso 2.1: hE (u) < hD(u)⇒ rotação esquerdaI Caso 1.2: hE (u) > hD(u)⇒ rotação dupla esquerda
Operação de rotação: O(1) (ajustar ponteiros p.esq, p.dir , u.esq,u.dir).Encontrar p: O(log n) (caminhar de q na direção da raiz)Regular p torna a árvore AVL. Por quê?
Árvores AVL: algoritmo para inserção
InsereAVL(no, chave)
if chave < no ↑ .chave thenif no ↑ .ptesq 6= λ thenInsereAVL(no ↑ .ptesq, chave)
elseno ↑ .ptesq = NovoNó(chave)
else {chave > no ↑ .chave}. . .
Árvores AVL: algoritmo para inserção
InsereAVL(no, chave)if chave < no ↑ .chave then
if no ↑ .ptesq 6= λ thenInsereAVL(no ↑ .ptesq, chave)
elseno ↑ .ptesq = NovoNó(chave)
else {chave > no ↑ .chave}. . .
Árvores AVL: algoritmo para inserção
InsereAVL(no, chave)if chave < no ↑ .chave thenif no ↑ .ptesq 6= λ thenInsereAVL(no ↑ .ptesq, chave)
elseno ↑ .ptesq = NovoNó(chave)
else {chave > no ↑ .chave}. . .
Árvores AVL: algoritmo para inserção
InsereAVL(no, chave)if chave < no ↑ .chave thenif no ↑ .ptesq 6= λ thenInsereAVL(no ↑ .ptesq, chave)
elseno ↑ .ptesq = NovoNó(chave)
else {chave > no ↑ .chave}. . .
Árvores AVL: algoritmo para inserção
InsereAVL(no, chave)if chave < no ↑ .chave thenif no ↑ .ptesq 6= λ thenInsereAVL(no ↑ .ptesq, chave)if hE (no) > hD(no) + 1 then {Caso 1}
u ← no ↑ .ptesqif hE (u) > hD(u) + 1 then {Caso 1.1}RotaçãoDireita(no, u)
else {Caso 1.2}v ← u ↑ .ptdirRotaçãoDuplaDireita(no, u, v)
. . .else
no ↑ .ptesq = NovoNó(chave)
Árvores AVL: Detalhes de implementação
I O cálculo de hE e hD demanda tempo O(log n).
I Esse cálculo é feito uma vez para cada nó entre q e a raiz.I Número de operações: O(log n log n) excede o desejado!I Na verdade, não preciso saber exatamente hE e hD , mas
apenas se um nó está desregulado e qual subárvore é a maior.I Uso de um campo bal ∈ {−1, 0, 1} para armazenar o balanço
de cada nó: bal := hD − hE .I A cada inserção, atualizo o balanço dos ancestrais de q. Se
algum balanço tornar-se −2 ou 2, faço as rotações apropriadas.I Um novo nó tem balanço 0.
Árvores AVL: Detalhes de implementação
I O cálculo de hE e hD demanda tempo O(log n).I Esse cálculo é feito uma vez para cada nó entre q e a raiz.
I Número de operações: O(log n log n) excede o desejado!I Na verdade, não preciso saber exatamente hE e hD , mas
apenas se um nó está desregulado e qual subárvore é a maior.I Uso de um campo bal ∈ {−1, 0, 1} para armazenar o balanço
de cada nó: bal := hD − hE .I A cada inserção, atualizo o balanço dos ancestrais de q. Se
algum balanço tornar-se −2 ou 2, faço as rotações apropriadas.I Um novo nó tem balanço 0.
Árvores AVL: Detalhes de implementação
I O cálculo de hE e hD demanda tempo O(log n).I Esse cálculo é feito uma vez para cada nó entre q e a raiz.I Número de operações: O(log n log n) excede o desejado!
I Na verdade, não preciso saber exatamente hE e hD , masapenas se um nó está desregulado e qual subárvore é a maior.
I Uso de um campo bal ∈ {−1, 0, 1} para armazenar o balançode cada nó: bal := hD − hE .
I A cada inserção, atualizo o balanço dos ancestrais de q. Sealgum balanço tornar-se −2 ou 2, faço as rotações apropriadas.
I Um novo nó tem balanço 0.
Árvores AVL: Detalhes de implementação
I O cálculo de hE e hD demanda tempo O(log n).I Esse cálculo é feito uma vez para cada nó entre q e a raiz.I Número de operações: O(log n log n) excede o desejado!I Na verdade, não preciso saber exatamente hE e hD , mas
apenas se um nó está desregulado e qual subárvore é a maior.
I Uso de um campo bal ∈ {−1, 0, 1} para armazenar o balançode cada nó: bal := hD − hE .
I A cada inserção, atualizo o balanço dos ancestrais de q. Sealgum balanço tornar-se −2 ou 2, faço as rotações apropriadas.
I Um novo nó tem balanço 0.
Árvores AVL: Detalhes de implementação
I O cálculo de hE e hD demanda tempo O(log n).I Esse cálculo é feito uma vez para cada nó entre q e a raiz.I Número de operações: O(log n log n) excede o desejado!I Na verdade, não preciso saber exatamente hE e hD , mas
apenas se um nó está desregulado e qual subárvore é a maior.I Uso de um campo bal ∈ {−1, 0, 1} para armazenar o balanço
de cada nó: bal := hD − hE .
I A cada inserção, atualizo o balanço dos ancestrais de q. Sealgum balanço tornar-se −2 ou 2, faço as rotações apropriadas.
I Um novo nó tem balanço 0.
Árvores AVL: Detalhes de implementação
I O cálculo de hE e hD demanda tempo O(log n).I Esse cálculo é feito uma vez para cada nó entre q e a raiz.I Número de operações: O(log n log n) excede o desejado!I Na verdade, não preciso saber exatamente hE e hD , mas
apenas se um nó está desregulado e qual subárvore é a maior.I Uso de um campo bal ∈ {−1, 0, 1} para armazenar o balanço
de cada nó: bal := hD − hE .I A cada inserção, atualizo o balanço dos ancestrais de q. Se
algum balanço tornar-se −2 ou 2, faço as rotações apropriadas.
I Um novo nó tem balanço 0.
Árvores AVL: Detalhes de implementação
I O cálculo de hE e hD demanda tempo O(log n).I Esse cálculo é feito uma vez para cada nó entre q e a raiz.I Número de operações: O(log n log n) excede o desejado!I Na verdade, não preciso saber exatamente hE e hD , mas
apenas se um nó está desregulado e qual subárvore é a maior.I Uso de um campo bal ∈ {−1, 0, 1} para armazenar o balanço
de cada nó: bal := hD − hE .I A cada inserção, atualizo o balanço dos ancestrais de q. Se
algum balanço tornar-se −2 ou 2, faço as rotações apropriadas.I Um novo nó tem balanço 0.
Árvores AVL: Detalhes de implementação
10
6 15
1773
42 00
000
-1 1
-1
Árvores AVL: Detalhes de implementação
10
6 15
1773
42
1
0-1
00-1
-2 1
-2
0
Árvores AVL: Detalhes de implementação
10
6 15
1773
42
1
0-1
00-1
-2 1
-2
0
Árvores AVL: Detalhes de implementação
10
3 15
1762
41 70
00-1
0 1
-1
0 0
Árvores AVL: remoção
1. faça a remoção como na árvore de busca binária: O(log n)
2. se outro nó ocupar o lugar do nó removido, atualize osbalanços desde o pai desse nó até a posição atual do nó:O(log n)
3. percorra o caminho desde o pai do nó removido até a raiz,fazendo as operações de rotação aprorpiadas (pode ser mais deuma): O(log n)
Total: O(log n).
Árvores AVL: remoção
1. faça a remoção como na árvore de busca binária: O(log n)
2. se outro nó ocupar o lugar do nó removido, atualize osbalanços desde o pai desse nó até a posição atual do nó:O(log n)
3. percorra o caminho desde o pai do nó removido até a raiz,fazendo as operações de rotação aprorpiadas (pode ser mais deuma): O(log n)
Total: O(log n).
Árvores AVL: remoção
1. faça a remoção como na árvore de busca binária: O(log n)
2. se outro nó ocupar o lugar do nó removido, atualize osbalanços desde o pai desse nó até a posição atual do nó:O(log n)
3. percorra o caminho desde o pai do nó removido até a raiz,fazendo as operações de rotação aprorpiadas (pode ser mais deuma): O(log n)
Total: O(log n).
Árvores AVL: remoção
1. faça a remoção como na árvore de busca binária: O(log n)
2. se outro nó ocupar o lugar do nó removido, atualize osbalanços desde o pai desse nó até a posição atual do nó:O(log n)
3. percorra o caminho desde o pai do nó removido até a raiz,fazendo as operações de rotação aprorpiadas (pode ser mais deuma): O(log n)
Total: O(log n).
Árvores AVL: remoção
10
5 17
197
4
15
20
3
13 16
12
Árvores AVL: remoção
10
5 17
197
4
15
20
3
13 16
12
Árvores AVL: remoção
10
5 17
19
4
15
20
3
13 16
12
Árvores AVL: remoção
10
4 17
195 15
20
3
13 16
12
Árvores AVL: remoção
10
4 17
195 15
20
3
13 16
12
Árvores AVL: remoção
15
10 17
1913 16
20
4
3 5 12
Conclusão
I Árvore binária de busca ótima: inserções/remoções não sãoviáveis.
I Árvore binária balanceada: alternativa su�cientemente boa.I Árvores balanceadas são muito usadas na vida real: ex.
TreeMap e TreeSet do Java.util. Em C++, Map e Set doSTL.
I Árvore AVL: tipo de árvore balanceada.I Busca, inserção, remoção em árvore AVL: O(log n).
Próxima aula: mais árvores balanceadas � Árvores vermelho-pretas(red-black trees).
Conclusão
I Árvore binária de busca ótima: inserções/remoções não sãoviáveis.
I Árvore binária balanceada: alternativa su�cientemente boa.
I Árvores balanceadas são muito usadas na vida real: ex.TreeMap e TreeSet do Java.util. Em C++, Map e Set doSTL.
I Árvore AVL: tipo de árvore balanceada.I Busca, inserção, remoção em árvore AVL: O(log n).
Próxima aula: mais árvores balanceadas � Árvores vermelho-pretas(red-black trees).
Conclusão
I Árvore binária de busca ótima: inserções/remoções não sãoviáveis.
I Árvore binária balanceada: alternativa su�cientemente boa.I Árvores balanceadas são muito usadas na vida real: ex.
TreeMap e TreeSet do Java.util. Em C++, Map e Set doSTL.
I Árvore AVL: tipo de árvore balanceada.I Busca, inserção, remoção em árvore AVL: O(log n).
Próxima aula: mais árvores balanceadas � Árvores vermelho-pretas(red-black trees).
Conclusão
I Árvore binária de busca ótima: inserções/remoções não sãoviáveis.
I Árvore binária balanceada: alternativa su�cientemente boa.I Árvores balanceadas são muito usadas na vida real: ex.
TreeMap e TreeSet do Java.util. Em C++, Map e Set doSTL.
I Árvore AVL: tipo de árvore balanceada.
I Busca, inserção, remoção em árvore AVL: O(log n).
Próxima aula: mais árvores balanceadas � Árvores vermelho-pretas(red-black trees).
Conclusão
I Árvore binária de busca ótima: inserções/remoções não sãoviáveis.
I Árvore binária balanceada: alternativa su�cientemente boa.I Árvores balanceadas são muito usadas na vida real: ex.
TreeMap e TreeSet do Java.util. Em C++, Map e Set doSTL.
I Árvore AVL: tipo de árvore balanceada.I Busca, inserção, remoção em árvore AVL: O(log n).
Próxima aula: mais árvores balanceadas � Árvores vermelho-pretas(red-black trees).
Conclusão
I Árvore binária de busca ótima: inserções/remoções não sãoviáveis.
I Árvore binária balanceada: alternativa su�cientemente boa.I Árvores balanceadas são muito usadas na vida real: ex.
TreeMap e TreeSet do Java.util. Em C++, Map e Set doSTL.
I Árvore AVL: tipo de árvore balanceada.I Busca, inserção, remoção em árvore AVL: O(log n).
Próxima aula: mais árvores balanceadas � Árvores vermelho-pretas(red-black trees).
Bibliogra�a Utilizada
SZWARCFITER, J. L. e MARKENZON, L. Estruturas de Dados e seus
Algoritmos, LTC, 1994.