Árvores
Árvores são estruturas hierárquicas que permitem fazer associações entre elementos chamados de nós. Esses elementos podem ser pais ou/ou filhos, isso significa que, diferente das listas, os nós não estão dispostos de maneira linear e sim acima ou abaixo uns dos outros. Sempre que um nó possuir filhos teremos uma sub-árvore.
Para entender melhor essa estrutura precisamos primeiro conhecer algumas partes de uma árvore:
Nó raiz: é o primeiro nó da estrutura, é a partir dele que os outros nós irão existir.
Nós filhos: são nós que pertencem ao nó raiz ou a qualquer outro nó.
Grau: o grau de um nó é determinado pela quantidade de filhos que ele possui.
Nível: o nó raiz é considerado o nível zero, a partir dele, cada geração é considerada mais um nível.
Nós folhas: são nós que não possuem filhos.
Profundidade: é o maior nível de uma árvore.
Para serem consideradas árvores essas estruturas podem ter apenas um nó raiz e
os nós podem ter apenas um nó pai.
As árvores podem ser usadas para representar diversas situações:
- Estrutura de pastas
- Árvore genealógica
- Organograma de uma empresa
- Árvores binárias
- Árvores B
- Árvores 2-3
Árvores Binárias
Árvore B
O nó raiz deverá possuir no mínimo 2 elementos chaves.
Cada nó deverá possuir no máximo M-1 e no mínimo M/2 elementos chave.
Por exemplo, uma árvore B com ordem de grandeza M=5, teria em seu nó raiz no mínimo dois elementos.Cada um desses elementos teria em seu nó filho no máximo 4 e no mínimo 2 elementos, cada elemento possuiria por sua vez um nó filho que seguiria o mesmo raciocínio.
Árvores 2-3
se o nó possuir uma única chave, poderá possuir de 0 a 2 nós filhos. Agora se o nó possuir duas chaves, poderá ter de 0 a 3 nós filhos.
Podemos dizer que árvores 2-3 são árvores B com ordem de grandeza M=4
public class Arvore{ public static void main(String[] args) { No raiz = new No("Raiz"); No no1 = new No("No 1"); No no11 = new No("No 1.1"); No no12 = new No("No 1.2"); no1.add(no11, 1); no1.add(no12, 2); No no2 = new No("No 2"); No no21 = new No("No 2.1"); no2.add(no21, 1); No no3 = new No("No 3"); No no31 = new No("No 3.1"); No no32 = new No("No 3.2"); No no33 = new No("No 3.3"); No no331 = new No("No 3.3.1"); no33.add(no331, 1); no3.add(no31, 1); no3.add(no32, 2); no3.add(no33, 3); raiz.add(no1, 1); raiz.add(no2, 2); raiz.add(no3, 3); raiz.imprimir(); System.out.println("--------"); raiz.remover(2); raiz.imprimir(); System.out.println("--------"); no3.imprimir(); } }
public class No { private No[] filhos = new No[10]; private String descricao; public No(String descricao) { this.descricao = descricao; } public void add(No no, int posicao) { filhos[posicao] = no; } public No[] getFilhos() { return filhos; } public String getDescricao() { return descricao; } public void imprimir() { imprimir(0); } public void remover(int i) { filhos[i] = null; } private void imprimir(int i) { System.out.println(tab(i)+descricao); i++; for (No no : filhos) { if (no != null) { no.imprimir(i); } } } private String tab(int i) { String retorno = ""; for (int j = 0; j < i; j++) { retorno +=" "; } return retorno; } }
Nenhum comentário:
Postar um comentário