Estruturas de dados e algoritmos

Tutorial de estrutura de dados em árvore para iniciantes

Tutorial de estrutura de dados em árvore para iniciantes

Introdução

Uma árvore no software é como uma árvore biológica, mas com as seguintes diferenças:

Os ramos da árvore do software são representados por linhas retas. Um bom exemplo de árvore de software que você pode ter usado é a árvore de diretórios do disco rígido do seu computador.

Existem diferentes tipos de árvores. Existe a árvore geral da qual outras árvores são derivadas. Outras árvores são derivadas da introdução de restrições na árvore geral. Por exemplo, você pode querer uma árvore em que não mais do que duas ramificações emanem de um nó; tal árvore seria chamada de árvore binária.  Este artigo descreve a árvore geral e como acessar todos os seus nós.

O hiperlink para baixar o código é fornecido no final deste artigo.

Para entender os exemplos de código neste artigo, você precisa ter conhecimento básico em JavaScript (ECMAScript). Se você não tiver esse conhecimento, poderá obtê-lo em http: // www.ampla rede.com / ChrysanthusForcha-1 / ECMAScript-2015-Course.htm

O Diagrama da Árvore Geral


'A' é o nó raiz; é o nó de primeiro nível. B, C, D estão na segunda linha; estes são nós de segundo nível. E, F, G, H, I, J, K estão na terceira linha e são nós de terceiro nível. Uma quarta linha teria produzido nós de quarto nível, e assim por diante.

Propriedades da árvore

- Todos os ramos para todos os níveis de nós, têm uma fonte, que é o nó raiz.

- Uma árvore tem N - 1 ramos, onde N é o número total de nós. O diagrama acima para a árvore geral tem 11 nós e 10 ramos.

- Ao contrário dos humanos, onde cada criança tem dois pais, com a árvore do software, cada criança tem apenas um pai. O nó raiz é o maior ancestral pai. Um pai pode ter mais de um filho. Cada nó, exceto o nó raiz, é um filho.

Vocabulário de Árvore

Atravessando todos os nós de uma árvore

Todos os nós de uma árvore podem ser acessados ​​para ler ou alterar qualquer valor do nó. No entanto, isso não é feito arbitrariamente. Existem três maneiras de fazer isso, todas as quais envolvem a Traversal em Profundidade, da seguinte forma:

1) Em ordem: Simplificando, neste esquema, a subárvore esquerda é percorrida primeiro; então, o nó raiz é acessado; então, a subárvore direita é percorrida. Este esquema é simbolizado como esquerda-> raiz-> direita. A Fig 1 é reapresentada aqui para fácil referência:

Supondo que haja dois irmãos por nó; então esquerda-> raiz-> direita significa, você acessa o nó mais baixo e mais à esquerda primeiro, então o pai do nó, e então o irmão direito. Quando houver mais de dois irmãos, tome o primeiro como o nó esquerdo e o resto dos nós direito, como o direito. Para a árvore geral acima, a subárvore inferior esquerda é acessada para ter, [EBF]. Esta é uma subárvore. O pai desta subárvore é A; então, A é acessado em seguida para ter [EBF] A. Em seguida, a subárvore [GCHI] é acessada para ter uma subárvore maior, [[EBF] A [GCHI]]. Você pode ver o perfil esquerdo-> raiz-> direito se retratando. Esta grande subárvore esquerda terá a subárvore, [JDK] à sua direita para completar a travessia para obter, [[EBF] A [GCHI]] [JDK].

2) Pré-encomenda: Simplificando, neste esquema, o nó raiz é acessado primeiro, a seguir a subárvore esquerda é percorrida em seguida e, em seguida, a subárvore direita é percorrida. Este esquema é simbolizado como root-> left-> right. A Fig 1 é reapresentada aqui para fácil referência.

Supondo que haja dois irmãos por nó; então root-> left-> right significa, você acessa a raiz primeiro, então o filho imediato esquerdo e, em seguida, o filho imediato direito. Quando houver mais de dois irmãos, tome o primeiro como o nó esquerdo e o resto dos nós direito, como o direito. O filho mais à esquerda do filho da esquerda é o próximo a ser acessado. Para a árvore geral acima, a subárvore raiz é [ABCD]. À esquerda desta subárvore, você tem a subárvore, [EF], dando a sequência de acesso, [ABCD] [EF]. À direita desta subárvore maior, você tem duas subárvores, [GHI] e [JK], dando a sequência completa, [ABCD] [EF] [GHI] [JK]. Você pode ver o perfil raiz-> esquerdo-> direito se retratando.

3) Pós-pedido: Simplificando, neste esquema, a subárvore esquerda é percorrida primeiro, depois a subárvore direita é percorrida e, em seguida, a raiz é acessada. Este esquema é simbolizado como esquerda-> direita-> raiz. A Fig. 1 é reapresentada aqui para fácil referência.

Para esta árvore, as subárvores são, [EFB], [GHIC], [JKD] e [A] que formam a sequência, [EFB], [GHIC], [JKD] [A]. Você pode ver o perfil esquerdo-> direito-> raiz se retratando.

Criando a Árvore

A árvore acima será criada usando ECMAScript, que é como a última versão do JavaScript. Cada nó é um array. O primeiro elemento de cada array de nós é o pai do nó, outro array. O resto dos elementos do nó são os filhos do nó, começando do filho mais à esquerda. Existe um mapa ECMAScript que relaciona cada array a sua string (letra) correspondente. O primeiro segmento de código é: