Skip to content

Latest commit

 

History

History
213 lines (160 loc) · 5.99 KB

Arvore.md

File metadata and controls

213 lines (160 loc) · 5.99 KB

Sumário

Árvore

Uma Árvore nada mais é do que um grafo conexo sem ciclos, com um vértice (nó) especial, chamado raiz.

image

Árvore Livre

É uma Árvore sem uma raiz especificada.

image

Floresta

Um Grafo formado por várias Árvores

image

Árvore Binária

A Árvore Binária possui até no máximo dois filhos por nó. Geralmente esse tipo de árvore é utilizada para a busca binária, onde permite uma menor quantidade de passos até chegar no nó desejado.

A Árvore Binária é estruturada de uma forma onde o nó X possui um peso Y, seu nó filho na esquerda possui o peso < Y, enquanto o nó filho na direita possui o peso > Y.

image

Cheia

É quando todas as folhas (nós que não possuem descendentes) estão em uma mesma profundidade e todos os nós internos têm grau 2 (dois nós filhos).

O número de vértices em uma Árvore Binária Cheia é 2^(h+1) - 1, onde h é a altura da árvore.

image

Completa (ou Quase Completa)

Quando a altura é h, cada folha está no nível h ou h-1.

image

Algoritmo de Busca

Os algoritmos de busca tem como base o método de procura de qualquer elemento dentro de um conjunto de elementos com determinadas propriedades.

{8, 3, 6, 10, 14, 1, 7, 13, 4}

Árvore Binária de Busca

Uma Árvore Binária é dita de busca, se para todos seus nós (vértices), temos que o elemento deste nó é maior que todos os elementos dos nós da subárvore à sua esquerda, e menor que todos os elementos dos nós da subárvore à sua direita.

Observações

  • Uma Árvore com n vértices tem n-1 arestas.
  • Em uma Árvore com n vértices, o número total de extremidades de arestas é 2n-2.

Percursos

Pré-Ordem

Percorre a Árvore a partir da seguinte ordem:

  • Descendente da esquerda
  • Descendente da direita

Algoritmo

//Pré-Orderm
const func = (node) => {
    if(node != null) {
        console.log(node)
        func(node.children[0])
        func(node.children[1])
    }else console.log(null)
}

image

Ordem

Percorre a Árvore a partir da seguinte ordem:

  • Descendente da esquerda
  • Descendente da direita

Algoritmo

//Orderm
const func = (node) => {
    if(node != null) {
        func(node.children[0])
        console.log(node)
        func(node.children[1])
    }else console.log(null)
}

image

Pós-Ordem

Percorre a Árvore a partir da seguinte ordem:

  • Descendente da esquerda
  • Descendente da direita

Algoritmo

//Pós-Orderm
const func = (node) => {
    if(node != null) {
        func(node.children[0])
        func(node.children[1])
        console.log(node)
    }else console.log(null)
}

image

Caso de aplicação

Notação Sequência Equivalência

Infixa

Convencional

Exibir a folha esquerda

Exibir a raiz

Exibir a folha direita

Ordem

Prefixa

Polonesa

Exibir a raiz

Exibir a folha esquerda

Exibir a folha direita

Pré-Ordem

Pósfixa

Polonesa Inversa

Exibir a folha esquerda

Exibir a folha direita

Exibir a raiz

Pós-Ordem

image

Infixa:

(3 * a) + (b + 5) - (4 / a)

Prefixa:

+ (* 3 a) (- (+ b 5) (/ 4 a))

Pósfixa:

(3 a *) ((b 5 +) (4 a /) -) +