1. ÁRVORE
2-3
Estrutura de Dados II
Equipe:
Augusto Teixeira
Carlos Littbarski
Jardel Rodrigues
Victor Apuena
Professor:
Alandson Meireles
2. Informações
- A ÁRVORE 2-3 FOI A PRIMEIRA ÁRVORE MULTICAMINHOS,
INVENTADA POR J. E. HOPCROFT EM 1970.
- 2-3 árvores são uma isometria de árvores AA, o que significa que são
estruturas de dados equivalentes. Em outras palavras, para cada 2-3
árvore, existe pelo menos uma árvore AA com elementos de dados na
mesma ordem. 2-3 árvores são equilibradas, o que significa que cada
direita, centro e sub-árvore esquerda contém o mesmo ou perto da
mesma quantidade de dados.
John E. Hopcroft
3. Características
- SÃO ÁRVORES FÁCEIS DE PROGRAMAR
- SÃO ÁRVORES MULTIVIAS
- NÃO É UMA ÁRVORE BINÁRIA
- ÁRVORES 2-3 SÃO SIMILARES ÀS ÁRVORES 2-3-4.
- 2-3 DIZEM A RESPEITO À QUANTIDADE DE FILHOS QUE A ÁRVORE PODE TER
(ASSIM COMO NA 2-3-4)
- PERFEITAMENTE BALANCEADA
5. Propriedades
- Cada nó contém uma, ou duas chaves;
- Cada nó interno tem dois filhos se tem uma chave, ou três se tem duas chaves;
- Todas as folhas estão no mesmo nível.
- Todos os dados são ordenados
NÓ COM 1 FILHO
a a b
P Q NÓ COM 2 FILHOS
P Q R
11. Inserção: Nó com 1 chave
b
Caso contrário, localize o nó a qual o valor pertence.
Se o nó tiver apenas 1 valor, adicione o valor no nó.
a
Regra #2
Regra #3
Inserir chave no nó sempre de forma ordenada.
13. Inserção: Nó com 2 chaves
c
Se o nó da folha tiver mais de dois valores, divida o nó e
promova a mediana dos três valores para o pai.
a b
Regra #4
Número de chaves estouradas
Promover a mediana
Quebrar o nó e fazer a ligação
14. Inserção: Nó com 2 chaves
ca
b
Nºs > que BNºs < que B
Nós com 1 chave devem sempre ter 2 filhos
39. 25 40
Limite estourado! DE NOVO!!!
10
Se o pai tem então três
valores, continuar a
dividir e promover,
formando um novo nó
raiz, se necessário
Regra #5
1 35 5015
45. Árvore 2-3
▪ Nó Simples:
▪ Contém uma chave e dois links; um link esquerdo para uma
árvore 2-3 que tem chaves menores que a chave do nó; e um
link direto para uma árvore 2-3 que tem chaves maiores;
46. Árvore 2-3
▪ Nó Duplo:
▪ Contém duas chaves e três links: um link esquerdo para uma
árvore 2-3 que tem chaves menores; e um link do meio para
uma árvore 2-3 que tem chaves entre as duas chaves do nó; e
um link direto para uma árvore 2-3 que tem chaves maiores;
47. Pesquisa em uma árvore 2-3
- Inicia-se sempre pela raiz;
- Caso o item pesquisado não se encontra na raiz, identifica o nó
filho da raiz em que o mesmo possa estar e siga para este nó;
- Se o item tiver valor maior que a raiz, siga para direita da
árvore, se não vá para esquerda;
- O processo se repete até que o item seja encontrado;
48. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 18
49. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 18
50. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 18
51. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 18
52. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 18
53. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 18
54. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 18
55. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 18
56. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 18
57. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 65
58. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 65
59. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 65
60. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 65
61. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 65
62. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 65
63. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 65
64. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 65
65. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 43
66. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 43
67. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 43
68. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 43
69. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 43
70. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 43
71. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 43
72. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 43
73. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 3
74. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 3
75. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 3
76. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 3
77. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 3
78. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 3
79. Exemplo de pesquisa Árvore 2-3
3
30
29
5010 20
12 18 40 43 7060
Pesquisando o 3
81. Remoção de uma árvore 2-3
- A remoção um item de uma árvore 2-3 é aproximadamente o inverso do
processo de inserção;
- Para remover um item, devemos primeiro procurar por ele;
- Se o item a ser removido estiver em uma folha com dois itens;
- simplesmente o excluímos;
- o removemos trocando-o item da árvores;
118. REFERÊNCIAS
USP - “Instituto de Matemática e Estatística”. Disponível em:
https://www.ime.usp.br/~gold/cursos/2002/mac2301/aulas/b-arvore/
LAFORE - ESTRUTURA DE DADOS E ALGORÍTMOS EM JAVA - 2ª EDIÇÃO
WIKIPEDIA - https://pt.wikipedia.org/wiki/%C3%81rvore_2-3
Gross, R. Hernández, J. C. Lázaro, R. Dormido, S. Ros (2001). Estructura de Datos
y Algoritmos Prentice Hall
Ellio B. Koffman Paul A. T. Olfgang (2006) : Objetos, Abstração, Estruturas de
dados e projeto usando C++