Árvores: estrutura de dados

Conheça as principais características e propriedades das árvores, uma das mais importantes estruturas de dados não lineares da computação.

09/11/2023

Conceito de árvores

As árvores representam um dos tipos de estruturas de dados mais importantes da computação. Elas podem ser implementadas em praticamente qualquer linguagem de programação.

A estrutura de uma árvore define uma organização de elementos dispostos de forma hierárquica. A imagem abaixo ilustra a representação de uma árvore, onde é possível perceber a analogia do termo utilizado para a estrutura.

arvores
arvores

Ela possui uma grande utilidade em diversas aplicações reais, tais como: estruturas de pastas em um sistema operacional, interfaces gráficas, banco de dados e sites da internet. Veja abaixo dois exemplos.

arvores

Uma árvore modelando relacionamentos em uma rede social

arvores

Uma árvore modelando a estrutura de pastas em um sistema operacional


Estrutura de uma árvore

Toda árvore é formada por dois elementos básicos denominados:

  • nós (ou nodos).
  • arestas, que interconectam estes nós.

Veja a ilustração na imagem abaixo.

arvores

Os nós de uma árvore representam espaços onde podem ser armazenados diversos tipos de informações, tais como: um telefone, uma data, um nome, uma lista de e-mails, um perfil de um usuário em uma rede social, para citar alguns.

As arestas, representam relacionamentos entre esses nós. Representam a forma com a qual os nós se conectam, e essa relação depende totalmente da forma como a árvore é utilizada e do tipo de informação que os nós da árvore armazenam. Por exemplo:

  • em uma árvore que modela relacionamentos em uma rede social, as arestas podem representar graus de amizade.
  • em uma árvore que modela a estrutura de pastas de um sistema operacional, as arestas podem representar graus de pertencimento (quais pastas pertencem a quais outras pastas).

A grande diferença de uma árvore para outras estruturas de dados comuns (tais como arranjos, listas, filas e pilhas) é que as árvores não são organizadas em uma sequência. Em uma árvore não podemos determinar o próximo elemento e o elemento anterior, porque as suas informações não se organizam de maneira enfileirada.

Veja na ilustração abaixo essa diferença.

arvores

Em uma lista, cada informação possui relação com outros dois elementos: o anterior e o próximo.

arvores

Em uma árvore, cada informação (nó) pode possui relação com mais de dois elementos

Por este motivo, as árvores são denominadas estruturas não lineares. E isto a torna uma estrutura bastante especial, com diversas propriedades e características diferenciadas.


Propriedades hierárquicas de uma árvore

Nó raiz

Toda a árvore possui um nó principal, denominado raiz. A raiz representa o nó inicial de todos os tipos de árvore.

arvores

Nós filhos e nós pais

A partir da raiz, todos os nós inferiores ligados a um nó superior são denominados nós filhos. Todos os nós superiores, que geram nós inferiores, são chamados de nós pais.

arvores
arvores

Nó folha

Os nós que não possuem filhos são denominados nós folha.

arvores

O termo “nó folha” faz alusão às folhas de uma árvore, já que elas representam o final de um galho. A imagem abaixo ilustra essa metáfora.

arvores

Nós irmãos

Outro conceito importante é o conceito de irmandade entre os nós. Dois nós são irmãos se eles descendem diretamente do mesmo nó pai. Veja os exemplos nas ilustrações abaixo.

arvores
arvores

Graus e ordem de uma árvore

O grau é a propriedade que qualifica os nós de uma árvore, ela define a quantidade de filhos que cada nó de uma árvore possui. Veja nas ilustrações abaixo.

arvores

A ordem é um conceito que qualifica toda a árvore. A ordem de uma árvore é definida pelo seu nó de maior grau. Ex.: se o maior grau da árvore é 3, então a árvore possui ordem 3. Veja abaixo algumas ilustrações.

arvores

Árvore de ordem 2

arvores

Árvore de ordem 3

arvores

Árvore de ordem 4


Ancestralidade e descendência

A ancestralidade é um conceito que qualifica nós superiores em relação a nós inferiores. Quando existe um conjunto de arestas que ligam um nó superior A a um nó inferior B, dizemos que A é ancestral de B.

arvores

A descendência é um conceito que qualifica nós inferiores em relação a nós superiores. Quando existe um conjunto de arestas que ligam um nó inferior B a um nó superior A, dizemos que B é descendente de A.

arvores

Profundidade de um nó

A profundidade é um conceito que qualifica um nó de uma árvore. Ela define a distância de um determinado nó até a raiz.

arvores

Nível de uma árvore

O nível define as fatias de profundidade de uma árvore, de maneira que os filhos de um nó sempre são colocados em níveis posteriores.

arvores

Altura de uma árvore

Representa a maior profundidade da árvore. Representa a distância entre a raiz e um nó folha do maior nível da árvore.

arvores

Conceito de subárvore

A partir da raiz, cada novo filho representa uma subárvore, uma nova árvore que se redefine de forma recursiva.

arvores

Representação computacional

Para representar computacionalmente uma árvore, precisamos de duas estruturas: uma para representar os nós da árvore e outra para representar toda a árvore.

Representação de uma árvore de ordem 2 (binária)

O código abaixo apresenta uma possível representação estrutural para uma árvore de ordem 2 (conhecida como árvore binária). Perceba que na classe node (linhas 7-18) temos dois apontadores (linhas 9-10), um para o filho da esquerda e outro para o filho da direita.

1./* Classe que representa àrvore binária */
2.public class BinaryTree {
3. Node root; // apontador para o nó raiz
4.}
5.
6./* Classe que representa os nós da árvore */
7.public class Node {
8. int value; // valor armazenado no nó
9. Node left; // apontador para o nó filho esquerdo
10. Node right; // apontador para o nó filho direito
11. /* Constutor do nó */
12. Node(int value) {
13. this.value = value;
14. right = null;
15. left = null;
16. }
17.}

Representação de uma árvore de ordem 4 (quadtree)

O código abaixo apresenta uma possível representação estrutural para uma árvore de ordem 4 (conhecida como quadtree). Perceba que na classe node (linhas 7-16) temos um arranjo de apontadores (linha 9) no lugar de dois apontadores left e right.

1./* Classe que representa a QuadTree */
2.public class QuadTree {
3. Node root; // apontador para o nó raiz
4.}
5.
6./* Classe que representa os nós da árvore*/
7.public class Node {
8. int value; // valor armazenado no nó
9. Node[] children; // arranjo de apontadores para os nós filhos
10. /* Constutor do nó */
11. Node(int value) {
12. this.value = value;
13. children = new Node[4]; // inicializa os apontadores
14. }
15.}

Os códigos apresentados acima representam apenas as estruturas das árvores. Além da representação estrutural, as árvores possuem diversas operações, tais como as operações básicas de: inserção, remoção, busca, para citar algumas.

autor

David Santiago

Mestre em Sistemas e Computação. Graduado em Sistemas de Informação. Professor de Linguagem de Programação, Algoritmos, Estruturas de Dados e Desenvolvimento de Jogos Digitais.

Outros artigos