Você está na página 1de 24

Árvores

NÚCLEO DE ENSINO A DISTÂNCIA - UCL


Árvores
• São estruturas de dados não lineares;
• Herda as características das topologia em árvore;
• Conceitualmente diferente das listas, em que os dados se encontram numa
sequência, nas árvores os dados estão dispostos de forma hierárquica, seus
elementos se encontram "acima" ou "abaixo" de outros elementos da
árvore;
• São estruturas eficientes e simples em relação ao tratamento
computacional;
• Estruturas de pastas de um sistema operacional, interfaces gráficas, bancos
de dados e sites da Internet são exemplos de aplicações de árvores;

NÚCLEO DE ENSINO A DISTÂNCIA - UCL


Árvores
• Uma árvore é formada por um conjunto de elementos que armazenam
informações chamados nodos ou nós;
• Toda a árvore possui o elemento chamado raiz, que possui ligações para
outros elementos denominados ramos ou filhos. Estes ramos podem estar
ligados a outros elementos que também podem possuir outros ramos. O
elemento que não possui ramos é conhecido como nó folha, nó terminal ou
nó externo;

NÚCLEO DE ENSINO A DISTÂNCIA - UCL


Árvores
• O relacionamento entre nodos é descrito com os termos "pai" para os
antecessores diretos de um nodo, "filhos" para os descendentes diretos e
"irmãos" para todos os nodos com mesmo pai;

NÚCLEO DE ENSINO A DISTÂNCIA - UCL


Árvores – Definição Formal
• Formalmente, definimos uma árvore T como um conjunto finito de zero ou
mais nós, de forma que:
• Se o número de nós = 0, temos uma árvore vazia;
• Se o número de nós > 0, temos:
• Existe um nó especial denominado raiz de T, que não possui pai;
• Cada nó diferente do raiz possui um único nó pai e pode ser considerado a raiz de uma subárvore de T.

• O número máximo de filhos de um nó é chamado ordem da árvore.


• Por exemplo, uma árvore em que cada dó tenha apenas dois filhos é chamada de
árvore binária.

NÚCLEO DE ENSINO A DISTÂNCIA - UCL


Árvores Ordenadas
• Uma árvore é considerada ordenada caso exista uma ordem linear definida
para os filhos de cada nó;
• Essa ordenação é normalmente realizada organizando os irmãos da
esquerda para a direita, de acordo com a regra de ordenação;

NÚCLEO DE ENSINO A DISTÂNCIA - UCL


Árvores
• As árvores armazenam elementos da mesma forma que uma lista o faz;
• As posições em uma árvore são os nós e o posicionamento pela vizinhança
satisfaz à relação pai-filho;
• Rotinas de acesso:
• Elemento(): Retorna o objeto armazenado na posição;
• Raiz(): Retorna a raiz da árvore. Caso seja vazia, retorna NULL;
• Pai(): Retorna o pai do elemento atual. Caso seja a raiz da árvore, retorna NULL;
• Filhos(): Retorna a lista dos filhos do elemento atual. Caso seja um nó folha, retorna
NULL;
• Caso a árvore seja ordenada, o método Filhos() permite o acesso aos filhos
no nó atual, na ordem;

NÚCLEO DE ENSINO A DISTÂNCIA - UCL


Árvores - Implementação
• A forma natural para implementação de uma árvore é com estruturas
encadeadas;

NÚCLEO DE ENSINO A DISTÂNCIA - UCL


Árvores - Caminhamento
• Caminhamento é uma forma sistemática de percorrer (ou visitar) todos os
nós de uma árvore, uma única vez;
• Podem ser de dois tipos:
• Pré-fixado (ou pré-ordem): primeiro é visitada a raiz da árvore e depois são visitadas as
subárvores, de acordo com a ordem dos filhos.
• Pós-fixado (ou pós-ordem): Primeiro são visitadas as subárvores e depois é visitada a
raiz da árvore.
• Como podemos notar, essas formas de caminhamento na árvore são
inerentemente recursivos;

NÚCLEO DE ENSINO A DISTÂNCIA - UCL


Árvores Binárias
• Árvores binárias são árvores onde um nó pode ter, no máximo, dois nós
filhos;
• São inerentemente ordenadas;
• O filho da esquerda precede o da direita na ordenação;
• Caso cada nó da árvore tenha zero ou dois filhos, é chamada de própria ou
cheia;

NÚCLEO DE ENSINO A DISTÂNCIA - UCL


Árvores Binárias
• Da mesma forma que
uma árvore genérica, a
forma mais natural para
implementar uma árvore
binária e uma estrutura
encadeada;

NÚCLEO DE ENSINO A DISTÂNCIA - UCL


Árvores Binárias – Inserção
private void Add (Node node, int value){
public class Node{ class Tree {
if (node == null)
public int Valor { get; set; } private Node raiz; node = raiz;

public Node Esq { get; set; } public Tree(int value){ if (value < node.Valor){

public Node Dir { get; set; } raiz = new Node(value); if (node.Esq == null)
node.Esq = new Node(value);
}
else
public Node(int value) public void Add(int value) Add(node.Esq, value);

{ { } else {

Valor = value; Add (null, value); if (node.Dir == null)


node.Dir = new Node(value);
} }
else
} Add(node.Dir, value);
}
}
}
NÚCLEO DE ENSINO A DISTÂNCIA - UCL
Árvores Binárias – Exclusão de folha
• Exclusão simples. Apenas exclui o nó.

NÚCLEO DE ENSINO A DISTÂNCIA - UCL


Árvores Binárias – Exclusão de folha com um
nó filho
• Excluindo-o, o filho sobe para a posição do pai.

NÚCLEO DE ENSINO A DISTÂNCIA - UCL


Árvores Binárias – Exclusão de folha com dois
nós filhos
• Pode-se atuar de duas formas:
• Pode-se substituir o valor do nó a ser retirado pelo valor sucessor (o nó
mais à esquerda da subárvore direita) ou;
• Pelo valor antecessor (o nó mais à direita da subárvore esquerda),
removendo-se aí o nó sucessor (ou antecessor).

NÚCLEO DE ENSINO A DISTÂNCIA - UCL


Árvores AVL
• Ao preencher uma árvore binária de busca, pode ocorrer de a estrutura da
árvore ficar linear;
• Caso isso ocorra, o ganho no tempo de busca fica comprometido, similar a
uma busca em uma lista simples;
• Quando temos essa situação, dizemos que a árvore de busca está
desbalanceada;
• Árvores AVL são árvores binárias que se mantêm balanceadas, por
definição;
• O nome AVL vem dos seus criadores, os soviéticos Adelson Velsky e Landis.

NÚCLEO DE ENSINO A DISTÂNCIA - UCL


Árvores AVL - Conceito
• Dizemos que uma árvore está balanceada se:
• Para qualquer nó, as alturas de suas duas subárvores, esquerda e direita, diferem em
módulo de até uma unidade.
• Dessa forma todos os nós de uma árvore AVL devem manter a seguinte
propriedade:
• |hd(u) - he(u)| ≤ 1, onde hd(u) é a altura da subárvore direita do nó u e he(u) é a altura
da subárvore esquerda do nó u;
• O valor hd(u) - he(u) é denominado fator de balanço do nó. Quando um nó possui
fator de balanço com valor -1, 0 ou 1 então o mesmo é um nó regulado. Todos os nós
de uma árvore AVL são regulados, caso contrário a árvore não é AVL.

NÚCLEO DE ENSINO A DISTÂNCIA - UCL


Árvores AVL - Inserção
• Para inserir um novo nó de valor K em uma árvore AVL é necessária uma
busca por K nesta mesma árvore;
• Após a busca o local correto para a inserção do nó K será em uma subárvore
vazia de uma folha da árvore;
• Depois de inserido o nó, a altura do nó pai e de todos os nós acima deve ser
atualizada;
• Em seguida o algoritmo de rotação simples ou dupla deve ser acionado para
o primeiro nó pai desregulado.

NÚCLEO DE ENSINO A DISTÂNCIA - UCL


Árvores AVL - Exclusão
• Para excluir um nó de valor K em uma árvore AVL é necessária uma busca
por K nesta mesma árvore;
• Caso a busca finalize em uma subárvore vazia, o nó procurado não está na
árvore;
• Caso contrário, realiza a exclusão do nó da mesma forma que realizada par
uma árvore binária comum;
• Em seguida o algoritmo de rotação simples ou dupla deve ser acionado para
o primeiro nó pai desregulado.

NÚCLEO DE ENSINO A DISTÂNCIA - UCL


Árvores AVL - Rotação
• A rotação na árvore AVL ocorre para corrigir o seu desbalanceamento;
• Uma rotação simples ocorre quando um nó está desbalanceado e seu filho
estiver no mesmo sentido da inclinação, formando uma linha reta;
• Uma rotação dupla ocorre quando um nó estiver desbalanceado e seu filho
estiver inclinado no sentido inverso ao pai, formando um "joelho“;
• Para garantirmos as propriedades da árvore AVL, rotações devem ser feitas
conforme necessário após operações de remoção ou inserção.
• Seja P o nó pai, FE o filho da esquerda de P e FD o filho da direita de P.
Podemos definir 4 tipos diferentes de rotação:
• Rotação simples à direita;
• Rotação simples à esquerda;
• Rotação dupla à direita;
• Rotação dupla à esquerda.

NÚCLEO DE ENSINO A DISTÂNCIA - UCL


Árvores AVL – Rotação simples à direita
• Deve ser efetuada quando a diferença das alturas h dos filhos de P é igual a
2 e a diferença das alturas h dos filhos de FE é igual a 1.
• O nó FE deve tornar o novo pai e o nó P deve se tornar o filho da direita de
FE, da seguinte forma:
• Seja Y o filho à esquerda de X;
• Torne o filho à direita de Y o filho à esquerda de X;
• Torne X o filho à direita de Y.

• Y –> nó 3
• X –> nó 5
• Filho à direita de Y –>
subárvore B

NÚCLEO DE ENSINO A DISTÂNCIA - UCL


Árvores AVL – Rotação simples à esquerda
• Deve ser efetuada quando a diferença das alturas h dos filhos de P é igual a
-2 e a diferença das alturas h dos filhos de FD é igual a -1.
• O nó FD deve tornar o novo pai e o nó P deve se tornar o filho da esquerda
de FD, da seguinte forma:
• Seja Y o filho à direita de X;
• Torne o filho à esquerda de Y o filho à direita de X;
• Torne X o filho à esquerda de Y.

• Y –> nó 5
• X –> nó 3
• Filho à esquerda de Y –>
subárvore B

NÚCLEO DE ENSINO A DISTÂNCIA - UCL


Árvores AVL – Rotação dupla à direita
• Deve ser efetuada quando a diferença das alturas h dos filhos de P é igual a
2 e a diferença das alturas h dos filhos de FE é igual a -1.
• Nesse caso devemos aplicar uma rotação à esquerda no nó FE e, em
seguida, uma rotação à direita no nó P.

NÚCLEO DE ENSINO A DISTÂNCIA - UCL


Árvores AVL – Rotação dupla à esquerda
• Deve ser efetuada quando a diferença das alturas h dos filhos de P é igual a
-2 e a diferença das alturas h dos filhos de FD é igual a 1.
• Nesse caso devemos aplicar uma rotação à direita no nó FD e, em seguida,
uma rotação à esquerda no nó P.

NÚCLEO DE ENSINO A DISTÂNCIA - UCL

Você também pode gostar