Este post tem o enfoque ao que é a estrutura de dado lista, mas, cada linguagem de programação pode representá-la ao seu modo, alterando brevemente alguma característica.
O que define uma árvore
Estrutura hierárquica de dados, ou seja, as informações se relacionam por meio de subordinação, um dado é uma sub informação de outro.
Um ótimo exemplo seria uma árvore genealógica
Em resumo uma árvore de dados é uma estrutura complexa, composta de diversos nós internos e externos, que possuem seus dados e endereços de outros nós relacionados hierarquicamente a ele.
Nomenclatures importantes para o entendimento e estudo
Nó (Node)
- A estrutura mínima de um nó são seus dados e o endereço dos nós hierarquicamente relacionados, seja ancestral ou descendente.
Raiz (Root)
- Root é o único na árvore quer não possuirá o endereço de um nó superior hierárquico porque é o nó inicial da árvore.
Nó interno
- Nó interno, todo o nó, abaixo do Root, que possuir ao menos um nó descendente hierárquico.
Nó externo (Leaf)
- Nó externo ou, comumente chamado, nó folha, o nó que não possuir descendente hierárquico, ou seja, onde a árvore se encere em uma das ramificações possíveis.
Ancestral:
- Nós hierarquicamente superiores, independente de qual nó seja. Só pode ser um nó interno, vez que precisa ter um descendente para que a partir do ponto de vista do descendente, este seja visto como ancestral.
Descendente:
- Nós hierarquicamente descendentes de outro, independente de qual nó seja. Pode ser um Nó interno ou um Nó folha, desde que descenda do ponto de vista do nó em questão.
Grau do nó (Degree):
- Quantidade nós Descendentes diretos de um determinado nó, em um contexto isolado do nó. Se tiver 3, então o grau do nó é 3
Grau da árvore (Degree of tree):
- Quantidade nós Descendentes diretos de um determinado nó, em um contexto mais amplo, comparando toda a árvore em busca do nó com maior quantidade de descendentes. Se tiver 3, então o grau do nó é 3
Profundidade (Depth):
- Quantidade de nós a partir da raiz até a folha mais distante.
Largura (Width):
- Quantidade de nós de um nível específico da árvore.
Largura da árvore (Width of tree):
- Número de nós do nível com maior quantidade de nós se comparado com os demais da árvore.
Floresta (Forest):
- Sub-árvores dentro da árvore principal.
Tamanho da árvore (Size of tree):
- Quantidade total de nós em uma árvore
Manipulação de uma árvore
A menos que se tenha o endereço da memória de um determinado nó, para manipular uma árvore e chegar um nó, é necessário percorrer por ela, podendo ser de modo Pré ordem, Em ordem, Pós ordem.
Se for começar a percorrer a arvore através, geralmente se faz da esquerda para a direita. Mas não é uma regra da estrutura de dados.
Pré ordem
Consome o nó antes dos filhos, percorrendo
Root → Left → Right.
1ºA
/ \
2ºB 7ºC
/ \ \
3ºD 6ºE 8ºF
/ \
4ºG 5ºH
Fluxo:
- 1- Consome o valor do Root (A) e vai para o Nó interno (B) consome seu valor
- 2- Do Nó interno (B) vai para o Nó interno (D) consome seu valor
- 3- Do Nó interno (D) vai para a Folha (G) consome seu valor
- 4- Da Folha (G) volta e visita o Nó Interno (D)
- 5- Do Nó Interno (D) vai para a Folha (H) consome seu valor
- 6- Da Folha (H) volta e visita o Nó Interno (D), como visitou todos Descendentes volta e visita o Nó Interno (B)
- 7- Do Nó Interno (B) vai para a Folha (E)consome seu valor
- 8- Da Folha (E) volta e visita o Nó Interno (B), como visitou todos Descendentes volta e visita o Root (A)
- 9- Do Root (A) vai para o Nó interno (C) consome seu valor
- 10- Do Nó interno (C) vai para a Folha (F) consome seu valor
Em ordem
Consome primeiro os valores das folhas e, em seguida, os nós internos ascendentes a elas, oposto ao fluxo da pré ordem
Left → Root → Right.
6ºA
/ \
4ºB 7ºC
/ \ \
2ºD 5ºE 8ºF
/ \
1ºG 3ºH
Fluxo:
- Do Root (A), visita nó interno (B), visita o nó interno (D) e vai para a folha (G)
- Consome o valor da Folha (G) e vai para o Nó interno (D) e consome seu valor
- Do Nó interno (D) vai para a Folha (H)e consome seu valor
- Da Folha (H) volta e visita o Nó Interno (D), como visitou todos Descendentes volta para o Nó Interno (B) consome seu valor
- Do Nó Interno (B) vai para a Folha (E) e consome seu valor
- Da Folha (E) volta e visita o Nó Interno (B), como visitou todos Descendentes volta e visita o Root (A)
- Do Root (A) vai para o Nó interno (C) e consome seu valor
- Do Nó interno (C) vai para a Folha (F) e consome seu valor
- Da Folha (F) volta e visita o Nó Interno (C), como visitou todos Descendentes volta para o Root (A) e consome seu valor
Pós ordem
Consome primeiro os valores de todas as folhas e, em seguida, o nó interno ascendentes a elas, diferente do fluxo da em ordem que consome o interno após consumir a primeira folha.
Left → Right → Root
8ºA
/ \
1ºB 6ºC
/ \ \
2ºD 5ºE 7ºF
/ \
3ºG 4ºH
Fluxo:
- 1- Visita o Nó interno (B) visita o Nó interno (D) e vai para a Folha (G)
- 2- Consome o valor da folha (G), visita o Nó interno (D), chega a Folha (H)
- 3- Consome o valor da folha (H), vai para o Nó interno (D) e consome seu valor
- 4- Visita o Nó interno (B), vai para a Folha (E) e consome seu valor
- 5- Da Folha (E), volta para o Nó Interno (B) e consome seu valor, em seguid, visita o Root (A), visita o Nó interno (C)
- 6- Do Nó interno (C) vai para a Folha (F) e consome seu valor
- 7- Da Folha (F) vai para o Nó interno (C) e consome seu valor
- 8- Da nó interno (C) vai o Root (A) e consome seu valor
Tipos de árvores
Clássica
Cada nó pode ter qualquer número de filhos. Não há restrição quanto à quantidade de descendentes.
A
/ \
B I
/ | \
C F G
/ \ \
D E H
Binária
Cada nó interno pode ter no máximo 2 descendentes.
A
/ \
B I
/ \
C G
/ \ \
D E H
Esse tipo de árvore possui sub-divisões para diferentes tipos de uso, com regras específicas.
Binária de busca
Filhos à esquerda têm valor menor que o nó, filhos à direita têm valor maior.
Binária balanceada
Mantém a árvore equilibrada para garantir buscas rápidas
Tipos de binária balanceada
AVL
Red-Black
Heap
- Min-Heap:
- Cada nó respeita uma propriedade de ordem (pai menor que filhos)
- Max-Heap:
- Cada nó respeita uma propriedade de ordem (pai maior que filhos)
PS: Por hoje é só pe pe pessoal! Abordarei mais sobre os tipos de árvore em outro momento, em posts específicos.
Leave a Reply