Segundo Koffman e Wolfgang (2008, p. 305), em ciência da computação, uma
árvore é: [...] como uma árvore na natureza, que possui um único tronco, que pode ser dividido em dois ou mais ramos principais. O predecessor de cada ramo principal é o tronco. Cada ramo principal pode gerar vários ramos secundários (sucessores dos ramos principais). O predecessor de cada ramo secundário é um ramo principal. Em ciência da computação, desenhamos uma árvore de cima para baixo, assim a raiz da árvore está no alto do diagrama em vez de na base.
A Figura 1 mostra o diagrama que representa a estrutura de uma árvore.
Figura 1 | Diagrama que representa uma árvore
B C D
E F G H Fonte: elaborada pelo autor.
A Figura 1 mostra um exemplo de estrutura de dados do tipo árvore, que é
formada por um conjunto de nós ou elementos e também um vínculo entre os nós também chamado de ramos. No diagrama apresentado, os nós são círculos (vértices) nas cores azul, preta e vermelha, assim como, os ramos são linhas (arestas) na cor verde. Os sucessores de um nó são conhecidos como filhos e o predecessor de um nó como pai, dessa forma, cada nó possui exatamente um pai, com exceção do nó raiz que não possui pai. Portanto, o nó B é pai dos nós E e F, da mesma forma que, os nós G e H são filhos do nó D. Os nós que não possuem filhos são chamados de folhas (no diagrama são os nós que estão na cor azul) ou também chamados de externos e os nós que não são folhas são chamados de internos. Uma subárvore de um nó é uma árvore cuja raiz é um filho desse nó. Por exemplo, o nó D pode formar uma subárvore contendo os três nós (D, G e H), assim como, o nó B pode formar uma subárvore contendo os três nós (B, E e F) ou também o nó C pode formar uma subárvore contendo somente com esse nó. Já um conjunto de árvores é chamada de floresta. A profundidade (ou nível) de um nó é encontrada pela distância do nó raiz até o nó desejado, onde o nó raiz possui a profundidade zero (0) e a cada aresta (ramo) percorrida é adicionado o valor um (1) até chegar no nó. Dessa forma, o nó A possui profundidade 0, os nós B, C e D possuem profundidade 1 e os nós E, F, G e H possuem profundidade 2. Um caminho é uma sequência de nós consecutivos distintos entre dois nós. Um caminho entre os nós A e F é a sequência dos nós A, B e F. O comprimento do caminho entre dois nós é determinado pela diferença de níveis entre os nós, portanto, o comprimento do caminho dos nós A e F é dois (2). Já a altura de um nó é o número de nós do maior caminho desse nó a um nó folha, ou também podemos definir que a altura de um nó é o número de ramos no maior caminho do nó até uma folha mais um. Portanto, os nós C, E, F, G e H tem altura um (1), os nós B e D tem altura dois (2), por fim, o nó A tem altura três (3). Observe que existe um caminho menor iniciando pelo nó C até o nó A, mas o caminho a ser considerado é o maior, por isso, foi considerado um dos caminhos iniciando do nó E, F, G ou H para se obter a altura do nó A. A altura de uma árvore é a altura do seu nó raiz, portanto, neste exemplo a altura da árvore é de três (3). Assim como os tipos abstratos, que foram vistos anteriormente, as árvores também possuem características da organização dos dados e as operações. As árvores são estruturas de dados recursivas, pois elas podem ser definidas recursivamente, por esse motivo diversas funções que são utilizadas para manipular árvores que serão mostradas a seguir estão escritas pelo método recursivo.