Buscar

Árvore Binária de Pesquisa

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 77 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 77 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 77 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Árvore Binária de Pesquisa
Aleffer Rocha
Universidade Tecnológica Federal do Paraná, Câmpus Ponta Grossa
1 de dezembro de 2017
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Introdução
O que é uma Árvore Binária de Pesquisa?
Uma Árvore Binária de Pesquisa trata-se de uma estrutura de dados, onde cada nó da
árvore pode ser representado por um objeto composto de por:
* Elemento chave;
* Ponteiro para o nó pai;
* Ponteiro para o nó esquerdo;
* Ponteiro para o nó direito.
Onde todo nó da subárvore à esquerda de um nó x possui valor chave menor que o valor
chave de x e todo nó da subárvore à direita de um nó x possui valor chave maior ou igual
que o valor chave de x.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Introdução
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Introdução
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Introdução
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Introdução
A Árvore Binária de Pesquisa comporta um conjunto de operações dinâmicas como:
* Busca;
* Menor Valor;
* Maior Valor;
* Antecessor;
* Sucessor;
* Inserção;
* Remoção.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Introdução
As operações básicas de uma Árvore Binária de Pesquisa podem ser executadas em tempo
proporcional a altura h da árvore.
Figura: Árvore Binária de Pesquisa com altura h = 4.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Introdução
Para uma árvore binária completa com n nós, cada operação executa em tempo Θ(lgn) no
pior caso.
Figura: Árvore binária completa com 15 nós.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Introdução
Para uma árvore binária com n nós que possui um comportamento linear, cada operação
executa em tempo Θ(n) no pior caso.
Figura: Árvore binária com comportamento linear com 4 nós.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Em Ordem
ImprimeEmOrdem(x)
1: if x , NULL then
2: ImprimeEmOrdem(x.esquerda)
3: print x.chave
4: ImprimeEmOrdem(x.direita)
5: end if
Sequência de nós:
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Em Ordem
ImprimeEmOrdem(x)
1: if x , NULL then
2: ImprimeEmOrdem(x.esquerda)
3: print x.chave
4: ImprimeEmOrdem(x.direita)
5: end if
Sequência de nós:
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Em Ordem
ImprimeEmOrdem(x)
1: if x , NULL then
2: ImprimeEmOrdem(x.esquerda)
3: print x.chave
4: ImprimeEmOrdem(x.direita)
5: end if
Sequência de nós:
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Em Ordem
ImprimeEmOrdem(x)
1: if x , NULL then
2: ImprimeEmOrdem(x.esquerda)
3: print x.chave
4: ImprimeEmOrdem(x.direita)
5: end if
Sequência de nós: 11.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Em Ordem
ImprimeEmOrdem(x)
1: if x , NULL then
2: ImprimeEmOrdem(x.esquerda)
3: print x.chave
4: ImprimeEmOrdem(x.direita)
5: end if
Sequência de nós: 11.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Em Ordem
ImprimeEmOrdem(x)
1: if x , NULL then
2: ImprimeEmOrdem(x.esquerda)
3: print x.chave
4: ImprimeEmOrdem(x.direita)
5: end if
Sequência de nós: 11, 18.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Em Ordem
ImprimeEmOrdem(x)
1: if x , NULL then
2: ImprimeEmOrdem(x.esquerda)
3: print x.chave
4: ImprimeEmOrdem(x.direita)
5: end if
Sequência de nós: 11, 18, 22.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Em Ordem
ImprimeEmOrdem(x)
1: if x , NULL then
2: ImprimeEmOrdem(x.esquerda)
3: print x.chave
4: ImprimeEmOrdem(x.direita)
5: end if
Sequência de nós: 11, 18, 22.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Em Ordem
ImprimeEmOrdem(x)
1: if x , NULL then
2: ImprimeEmOrdem(x.esquerda)
3: print x.chave
4: ImprimeEmOrdem(x.direita)
5: end if
Sequência de nós: 11, 18, 22, 28.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Em Ordem
ImprimeEmOrdem(x)
1: if x , NULL then
2: ImprimeEmOrdem(x.esquerda)
3: print x.chave
4: ImprimeEmOrdem(x.direita)
5: end if
Sequência de nós: 11, 18, 22, 28.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Em Ordem
ImprimeEmOrdem(x)
1: if x , NULL then
2: ImprimeEmOrdem(x.esquerda)
3: print x.chave
4: ImprimeEmOrdem(x.direita)
5: end if
Sequência de nós: 11, 18, 22, 28, 52.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Em Ordem
Teorema
Se x é a raiz de uma subárvore com n nós, então o algoritmo ImprimeEmOrdem(x) tem
complexidade Θ(n).
Seja T(n) a complexidade do algoritmo quando ele é chamado na raiz de uma subárvore
com n nós. O algoritmo demora um tempo constante c em uma subárvore vazia, então
T(n) = c, n = 0.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Em Ordem
Teorema
Se x é a raiz de uma subárvore com n nós, então o algoritmo ImprimeEmOrdem(x) tem
complexidade Θ(n).
Para n > 0, suponha que o algoritmo seja
chamado em um nó x cuja subárvore
esquerda têm k nós e cuja subárvore direita
tem n − k − 1 nós.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Em Ordem
Teorema
Se x é a raiz de uma subárvore com n nós, então o algoritmo ImprimeEmOrdem(x) tem
complexidade Θ(n).
O tempo para execução do algoritmo é
T(n) = T(k) + T(n − k − 1) + d para alguma
constante positiva d que reflete o tempo para
executar o algoritmo, executando-se o tempo
gasto em chamadas recursivas.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Em Ordem
Teorema
Se x é a raiz de uma subárvore com n nós, então o algoritmo ImprimeEmOrdem(x) tem
complexidade de tempo de execução Θ(n).
Para n = 0, temos (c + d) ∗ 0 + c = c = T(0). Para n > 0 temos:
T(n) = T(k) + T(n − k − 1) + d
= ((c + d) ∗ k + c) + ((c + d)(n − k − 1) + c) + d
= (c + d) ∗ n + c − (c + d) + c + d
= (c + d) ∗ n + c
Portanto, o algoritmo ImprimeEmOrdem(x) tem complexidade de execução Θ(n). �
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Busca
Busca pelo valor 18, onde k = 18 e x é o endereço do nó raiz.
BuscaRecursiva(x, k)
1: if x == NULL or k == x.chave then
2: return x
3: end if
4: if k < x.chave then
5: return BuscaRecursiva(x.esquerda, k)
6: else
7: return BuscaRecursiva(x.direita, k)
8: end if
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Busca
Busca pelo valor 18, onde k = 18 e x é o endereço do nó raiz.
BuscaRecursiva(x, k)
1: if x == NULL or k == x.chave then
2: return x
3: end if
4: if k < x.chave then
5: return BuscaRecursiva(x.esquerda, k)
6: else
7: return BuscaRecursiva(x.direita, k)
8: end if
Introdução Em Ordem Busca Menor Valor MaiorValor Sucessor Antecessor Inserção Remoção Referência
Busca
Busca pelo valor 18, onde k = 18 e x é o endereço do nó raiz.
BuscaRecursiva(x, k)
1: if x == NULL or k == x.chave then
2: return x
3: end if
4: if k < x.chave then
5: return BuscaRecursiva(x.esquerda, k)
6: else
7: return BuscaRecursiva(x.direita, k)
8: end if
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Busca
Busca pelo valor 18, onde k = 18 e x é o endereço do nó raiz.
BuscaRecursiva(x, k)
1: if x == NULL or k == x.chave then
2: return x
3: end if
4: if k < x.chave then
5: return BuscaRecursiva(x.esquerda, k)
6: else
7: return BuscaRecursiva(x.direita, k)
8: end if
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Busca
Busca pelo valor 18, onde k = 18 e x é o endereço do nó raiz.
BuscaRecursiva(x, k)
1: if x == NULL or k == x.chave then
2: return x
3: end if
4: if k < x.chave then
5: return BuscaRecursiva(x.esquerda, k)
6: else
7: return BuscaRecursiva(x.direita, k)
8: end if
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Busca
Busca pelo valor 18, onde k = 18 e x é o endereço do nó raiz.
BuscaIterativa(x, k)
1: while x , NULL and k , x.chave do
2: if k < x.chave then
3: x = x.esquerda
4: else
5: x = x.direita
6: end if
7: end while
8: return x
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Busca
Busca pelo valor 18, onde k = 18 e x é o endereço do nó raiz.
BuscaIterativa(x, k)
1: while x , NULL and k , x.chave do
2: if k < x.chave then
3: x = x.esquerda
4: else
5: x = x.direita
6: end if
7: end while
8: return x
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Busca
Busca pelo valor 18, onde k = 18 e x é o endereço do nó raiz.
BuscaIterativa(x, k)
1: while x , NULL and k , x.chave do
2: if k < x.chave then
3: x = x.esquerda
4: else
5: x = x.direita
6: end if
7: end while
8: return x
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Busca
Busca pelo valor 18, onde k = 18 e x é o endereço do nó raiz.
BuscaIterativa(x, k)
1: while x , NULL and k , x.chave do
2: if k < x.chave then
3: x = x.esquerda
4: else
5: x = x.direita
6: end if
7: end while
8: return x
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Busca
Busca pelo valor 18, onde k = 18 e x é o endereço do nó raiz.
BuscaIterativa(x, k)
1: while x , NULL and k , x.chave do
2: if k < x.chave then
3: x = x.esquerda
4: else
5: x = x.direita
6: end if
7: end while
8: return x
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Menor Valor
Busca pelo Menor Valor chave na árvore onde x é o endereço do nó raiz.
MenorValor(x)
1: while x.esquerda , NULL do
2: x = x.esquerda
3: end while
4: return x
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Menor Valor
Busca pelo Menor Valor chave na árvore onde x é o endereço do nó raiz.
MenorValor(x)
1: while x.esquerda , NULL do
2: x = x.esquerda
3: end while
4: return x
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Menor Valor
Busca pelo Menor Valor chave na árvore onde x é o endereço do nó raiz.
MenorValor(x)
1: while x.esquerda , NULL do
2: x = x.esquerda
3: end while
4: return x
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Maior Valor
Busca pelo Maior Valor chave na árvore onde x é o endereço do nó raiz.
MaiorValor(x)
1: while x.direta , NULL do
2: x = x.direita
3: end while
4: return x
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Maior Valor
Busca pelo Maior Valor chave na árvore onde x é o endereço do nó raiz.
MaiorValor(x)
1: while x.direta , NULL do
2: x = x.direita
3: end while
4: return x
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Maior Valor
Busca pelo Maior Valor chave na árvore onde x é o endereço do nó raiz.
MaiorValor(x)
1: while x.direta , NULL do
2: x = x.direita
3: end while
4: return x
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Maior Valor
Busca pelo Maior Valor chave na árvore onde x é o endereço do nó raiz.
MaiorValor(x)
1: while x.direta , NULL do
2: x = x.direita
3: end while
4: return x
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Maior Valor
Busca pelo Maior Valor chave na árvore onde x é o endereço do nó raiz.
MaiorValor(x)
1: while x.direta , NULL do
2: x = x.direita
3: end while
4: return x
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Sucessor
Sucessor(x)
1: if x.direita , NULL then
2: returnMenorValor(x.direita)
3: end if
4: y = x.pai
5: while y , NULL and x == y.direita do
6: x = y
7: y = y.pai
8: end while
9: return y
Para este exemplo, x é o nó cujo
x.chave = 28.
x.chave = 28
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Sucessor
Sucessor(x)
1: if x.direita , NULL then
2: returnMenorValor(x.direita)
3: end if
4: y = x.pai
5: while y , NULL and x == y.direita do
6: x = y
7: y = y.pai
8: end while
9: return y
Para este exemplo, x é o nó cujo
x.chave = 28.
x.chave = 28
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Sucessor
Sucessor(x)
1: if x.direita , NULL then
2: returnMenorValor(x.direita)
3: end if
4: y = x.pai
5: while y , NULL and x == y.direita do
6: x = y
7: y = y.pai
8: end while
9: return y
Para este exemplo, x é o nó cujo
x.chave = 28.
x.chave = 28
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Sucessor
Sucessor(x)
1: if x.direita , NULL then
2: returnMenorValor(x.direita)
3: end if
4: y = x.pai
5: while y , NULL and x == y.direita do
6: x = y
7: y = y.pai
8: end while
9: return y
Para este exemplo, x é o nó cujo
x.chave = 28.
x.chave = 28
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Sucessor
Sucessor(x)
1: if x.direita , NULL then
2: returnMenorValor(x.direita)
3: end if
4: y = x.pai
5: while y , NULL and x == y.direita do
6: x = y
7: y = y.pai
8: end while
9: return y
Para este exemplo, x é o nó cujo
x.chave = 28.
x.chave = 28
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Sucessor
Sucessor(x)
1: if x.direita , NULL then
2: returnMenorValor(x.direita)
3: end if
4: y = x.pai
5: while y , NULL and x == y.direita do
6: x = y
7: y = y.pai
8: end while
9: return y
Para este exemplo, x é o nó cujo
x.chave = 28.
x.chave = 28
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Sucessor
Sucessor(x)
1: if x.direita , NULL then
2: returnMenorValor(x.direita)
3: end if
4: y = x.pai
5: while y , NULL and x == y.direita do
6: x = y
7: y = y.pai
8: end while
9: return y
Para este exemplo, x é o nó cujo
x.chave = 28.
x.chave = 48
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Sucessor
Sucessor(x)
1: if x.direita , NULL then
2: returnMenorValor(x.direita)
3: end if
4: y = x.pai
5: while y , NULL and x == y.direitado
6: x = y
7: y = y.pai
8: end while
9: return y
Para este exemplo, x é o nó cujo
x.chave = 28.
x.chave = 48
y.chave = 50
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Sucessor
Sucessor(x)
1: if x.direita , NULL then
2: returnMenorValor(x.direita)
3: end if
4: y = x.pai
5: while y , NULL and x == y.direita do
6: x = y
7: y = y.pai
8: end while
9: return y
Para este exemplo, x é o nó cujo
x.chave = 28.
x.chave = 48
y.chave = 50
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Antecessor
Antecessor(x)
1: if x.esquerda , NULL then
2: returnMaiorValor(x.esquerda)
3: end if
4: y = x.pai
5: while y , NULL and x == y.esquerda do
6: x = y
7: y = y.pai
8: end while
9: return y
Para este exemplo, x é o nó cujo
x.chave = 28.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Antecessor
Antecessor(x)
1: if x.esquerda , NULL then
2: returnMaiorValor(x.esquerda)
3: end if
4: y = x.pai
5: while y , NULL and x == y.esquerda do
6: x = y
7: y = y.pai
8: end while
9: return y
Para este exemplo, x é o nó cujo
x.chave = 28.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Antecessor
Antecessor(x)
1: if x.esquerda , NULL then
2: returnMaiorValor(x.esquerda)
3: end if
4: y = x.pai
5: while y , NULL and x == y.esquerda do
6: x = y
7: y = y.pai
8: end while
9: return y
Para este exemplo, x é o nó cujo
x.chave = 28.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Antecessor
Antecessor(x)
1: if x.esquerda , NULL then
2: returnMaiorValor(x.esquerda)
3: end if
4: y = x.pai
5: while y , NULL and x == y.esquerda do
6: x = y
7: y = y.pai
8: end while
9: return y
Para este exemplo, x é o nó cujo
x.chave = 28.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Antecessor
Antecessor(x)
1: if x.esquerda , NULL then
2: returnMaiorValor(x.esquerda)
3: end if
4: y = x.pai
5: while y , NULL and x == y.esquerda do
6: x = y
7: y = y.pai
8: end while
9: return y
Para este exemplo, x é o nó cujo
x.chave = 28.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Antecessor
Antecessor(x)
1: if x.esquerda , NULL then
2: returnMaiorValor(x.esquerda)
3: end if
4: y = x.pai
5: while y , NULL and x == y.esquerda do
6: x = y
7: y = y.pai
8: end while
9: return y
Para este exemplo, x é o nó cujo
x.chave = 28.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Antecessor
Teorema
Os procedimentos BuscaIterativa, BuscaRecursiva, MenorValor, MaiorValor, Sucessor e
Antecessor possuem tempo de execução como complexidade O(h) em uma Árvore Binária
de Pesquisa com altura h.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Inserção
Insercao(T, z)
1: y = NULL
2: x = T.root
3: while x , NULL do
4: y = x
5: if z.chave < x.chave then
6: x = x.esquerda
7: else
8: x = x.direita
9: end if
10: end while
11: z.p = y
12: if y == NULL then
13: T.root = z
14: else if z.chave < y.chave then
15: y.esquerda = z
16: else
17: y.direita = z
18: end if
Inserção de z, onde z.chave = 7 e T é a
árvore.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Inserção
Insercao(T, z)
1: y = NULL
2: x = T.root
3: while x , NULL do
4: y = x
5: if z.chave < x.chave then
6: x = x.esquerda
7: else
8: x = x.direita
9: end if
10: end while
11: z.p = y
12: if y == NULL then
13: T.root = z
14: else if z.chave < y.chave then
15: y.esquerda = z
16: else
17: y.direita = z
18: end if
Inserção de z, onde z.chave = 7 e T é a
árvore.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Inserção
Insercao(T, z)
1: y = NULL
2: x = T.root
3: while x , NULL do
4: y = x
5: if z.chave < x.chave then
6: x = x.esquerda
7: else
8: x = x.direita
9: end if
10: end while
11: z.p = y
12: if y == NULL then
13: T.root = z
14: else if z.chave < y.chave then
15: y.esquerda = z
16: else
17: y.direita = z
18: end if
Inserção de z, onde z.chave = 7 e T é a
árvore.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Inserção
Insercao(T, z)
1: y = NULL
2: x = T.root
3: while x , NULL do
4: y = x
5: if z.chave < x.chave then
6: x = x.esquerda
7: else
8: x = x.direita
9: end if
10: end while
11: z.p = y
12: if y == NULL then
13: T.root = z
14: else if z.chave < y.chave then
15: y.esquerda = z
16: else
17: y.direita = z
18: end if
Inserção de z, onde z.chave = 7 e T é a
árvore.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Inserção
Insercao(T, z)
1: y = NULL
2: x = T.root
3: while x , NULL do
4: y = x
5: if z.chave < x.chave then
6: x = x.esquerda
7: else
8: x = x.direita
9: end if
10: end while
11: z.p = y
12: if y == NULL then
13: T.root = z
14: else if z.chave < y.chave then
15: y.esquerda = z
16: else
17: y.direita = z
18: end if
Inserção de z, onde z.chave = 7 e T é a
árvore.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Inserção
Insercao(T, z)
1: y = NULL
2: x = T.root
3: while x , NULL do
4: y = x
5: if z.chave < x.chave then
6: x = x.esquerda
7: else
8: x = x.direita
9: end if
10: end while
11: z.p = y
12: if y == NULL then
13: T.root = z
14: else if z.chave < y.chave then
15: y.esquerda = z
16: else
17: y.direita = z
18: end if
Inserção de z, onde z.chave = 7 e T é a
árvore.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Remoção
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Remoção
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Remoção
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Remoção
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Remoção
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Remoção
Remover(T, z)
1: if z.esquerda == NULL then
2: Transplantar(T, z, z.direita)
3: else if z.direita == NULL then
4: Transplantar(T, z, z.esquerda)
5: else
6: y = MenorValor(z.direita)
7: if y.p , z then
8: Transplantar(T, y, y.direita)
9: y.direita = z.direita
10: y.direita.pai = y
11: end if
12: Transplantar(T, z, t)
13: y.esquerda = z.direita
14: y.esquerda.pai = y
15: end if
Removendo o nó z, onde z.chave = 42.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Remoção
Remover(T, z)
1: if z.esquerda == NULL then
2: Transplantar(T, z, z.direita)
3: else if z.direita == NULL then
4: Transplantar(T, z, z.esquerda)
5: else
6: y = MenorValor(z.direita)
7: if y.p , z then
8: Transplantar(T, y, y.direita)
9: y.direita = z.direita
10: y.direita.pai = y
11: end if
12: Transplantar(T, z, t)
13: y.esquerda = z.direita
14: y.esquerda.pai = y
15: end if
Removendo o nó z, onde z.chave = 42.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Remoção
Remover(T, z)
1: if z.esquerda == NULL then
2: Transplantar(T, z, z.direita)
3: else if z.direita == NULL then
4: Transplantar(T, z, z.esquerda)
5: else
6: y = MenorValor(z.direita)
7: ify.p , z then
8: Transplantar(T, y, y.direita)
9: y.direita = z.direita
10: y.direita.pai = y
11: end if
12: Transplantar(T, z, t)
13: y.esquerda = z.direita
14: y.esquerda.pai = y
15: end if
Removendo o nó z, onde z.chave = 42.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Remoção
Transplantar(T, u, v)
1: if u.pai == NULL then
2: T.root = v
3: else if u == u.pai.esquerda then
4: u.pai.esquerda = v
5: else
6: u.pai.direita = v
7: end if
8: if v , NULL then
9: v.pai = u.pai
10: end if
Removendo o nó z, onde z.chave = 42.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Remoção
Transplantar(T, u, v)
1: if u.pai == NULL then
2: T.root = v
3: else if u == u.pai.esquerda then
4: u.pai.esquerda = v
5: else
6: u.pai.direita = v
7: end if
8: if v , NULL then
9: v.pai = u.pai
10: end if
Removendo o nó z, onde z.chave = 42.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Remoção
Remover(T, z)
1: if z.esquerda == NULL then
2: Transplantar(T, z, z.direita)
3: else if z.direita == NULL then
4: Transplantar(T, z, z.esquerda)
5: else
6: y = MenorValor(z.direita)
7: if y.p , z then
8: Transplantar(T, y, y.direita)
9: y.direita = z.direita
10: y.direita.pai = y
11: end if
12: Transplantar(T, z, t)
13: y.esquerda = z.direita
14: y.esquerda.pai = y
15: end if
Removendo o nó z, onde z.chave = 42.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Remoção
Teorema
As operações de Insercao e Remover possuem implementações que podem ser executadas
com complexidade de tempo O(h) em uma Árvore Binária de Pesquisa com altura h.
Introdução Em Ordem Busca Menor Valor Maior Valor Sucessor Antecessor Inserção Remoção Referência
Referência
* Livro: Introduction to Algorithms, 3ª edição.
* Autores: Thomas H. Cormen, Charles E.
Leiserson, Ronald L. Rivest e Clifford Stein;
* Páginas: 286 a 298.
	Introdução
	
	Em Ordem
	
	Busca
	
	Menor Valor
	
	Maior Valor
	
	Sucessor
	
	Antecessor
	
	Inserção
	
	Remoção
	
	Referência

Outros materiais