Árvores BináriasÁrvores Binárias
Prof. Ernesto LindstaedtProf. Ernesto Lindstaedt
DefiniçõesDefinições Uma árvore binária T é um conjunto finito de elementos Uma árvore binária T é um conjunto finito de elementos
denominados nós ou vértices, tal que:denominados nós ou vértices, tal que:• Se T = 0, a árvore é dita vazia, ouSe T = 0, a árvore é dita vazia, ou• Existe um nó especial r, chamado raiz de T, e os restantes Existe um nó especial r, chamado raiz de T, e os restantes
podem ser divididos em dois subconjuntos disjuntos, Trpodem ser divididos em dois subconjuntos disjuntos, TrEE e Tr e TrDD, a , a sub-árvore esquerda e a direita de r, respectivamente, as quais sub-árvore esquerda e a direita de r, respectivamente, as quais são também árvores binárias.são também árvores binárias.
• A raiz da sub-árvore esquerda (direita) de um nó v, se existir, é A raiz da sub-árvore esquerda (direita) de um nó v, se existir, é denominada filho esquerdo (direito) de v. Naturalmente, o denominada filho esquerdo (direito) de v. Naturalmente, o esquerdo pode existir sem o direito e vice-versa. Se r é a raiz de esquerdo pode existir sem o direito e vice-versa. Se r é a raiz de T, diz-se, também, que TrT, diz-se, também, que TrEE e Tr e TrDD são as sub-árvores esquerda e são as sub-árvores esquerda e direita de T, respectivamente.direita de T, respectivamente.
• Uma árvore binária pode ter duas sub-árvores vazias (a esquerda Uma árvore binária pode ter duas sub-árvores vazias (a esquerda e a direita). Toda árvore binária com n nós possui exatamente n e a direita). Toda árvore binária com n nós possui exatamente n + 1 sub-árvores vazias entre suas sub-árvores esquerdas e + 1 sub-árvores vazias entre suas sub-árvores esquerdas e direitas.direitas.
continuaçãocontinuação
Uma árvore binária é uma árvore Uma árvore binária é uma árvore cujos os nós têm 0, 1 ou 2 filhos e cujos os nós têm 0, 1 ou 2 filhos e cada filho é designado como filho à cada filho é designado como filho à esquerda ou filho à direita (esquerda ou filho à direita (Grau 2Grau 2););
O número de folhas é uma O número de folhas é uma importante característica das árvores importante característica das árvores binárias para mensurar a eficiência binárias para mensurar a eficiência esperada de algoritmos.esperada de algoritmos.
Classificação de Árvores BináriasClassificação de Árvores Binárias Árvore Estritamente BináriaÁrvore Estritamente Binária
• Se cada Se cada nó não terminalnó não terminal em uma árvore binária ter em uma árvore binária ter sub-árvores à esquerda e direita, ou nenhum nó tem sub-árvores à esquerda e direita, ou nenhum nó tem filho únicofilho único;;
• Uma árvore com n folhas, terá 2n – 1 nós.Uma árvore com n folhas, terá 2n – 1 nós.
Classificação de Árvores BináriasClassificação de Árvores Binárias
Árvore Binária Completa (ou Quase Árvore Binária Completa (ou Quase Completa)Completa)• Uma árvore binária de nível n é uma árvore Uma árvore binária de nível n é uma árvore
binária completa se:binária completa se: cada nó com menos de dois filhos deve estar no nível cada nó com menos de dois filhos deve estar no nível
n ou no nível n-1n ou no nível n-1
Classificação de Árvores BináriasClassificação de Árvores Binárias
Árvore Binária CheiaÁrvore Binária Cheia• Uma árvore binária cheia de nível n é a árvore Uma árvore binária cheia de nível n é a árvore
estritamente binária, onde todos os nós folhas estão no estritamente binária, onde todos os nós folhas estão no nível n;nível n;
• Uma árvore cheia com altura h, terá 2Uma árvore cheia com altura h, terá 2hh – 1 nós. – 1 nós.
Caminhamentos em Árvores BináriasCaminhamentos em Árvores Binárias
• Caminhamento em profundidade: os nós Caminhamento em profundidade: os nós da sub-árvore atual têm prioridade na da sub-árvore atual têm prioridade na ordem de acesso;ordem de acesso;
• Caminhamento em largura (amplitude): Caminhamento em largura (amplitude): os nós de menor nível têm prioridade na os nós de menor nível têm prioridade na ordem de acesso.ordem de acesso.
Caminhamentos em Árvores BináriasCaminhamentos em Árvores Binárias Em profundidade, temos três tipos Em profundidade, temos três tipos
“canônicos”:“canônicos”: Pré-ordemPré-ordem Pós-ordemPós-ordem Em-ordemEm-ordem
Em amplitude, temos:Em amplitude, temos: Em nívelEm nível
Caminhamento Pré-ordemCaminhamento Pré-ordem Visitar a raizVisitar a raiz Percorrer a sub-árvore esquerda em pré-ordemPercorrer a sub-árvore esquerda em pré-ordem Percorrer a sub-árvore direita em pré-ordemPercorrer a sub-árvore direita em pré-ordem
Percurso: 4, 2, 1, 3, 6, 5, 7Percurso: 4, 2, 1, 3, 6, 5, 7
4
2 6
31 75
Caminhamento Pós-ordemCaminhamento Pós-ordem Percorrer a sub-árvore esquerda em pós-ordemPercorrer a sub-árvore esquerda em pós-ordem Percorrer a sub-árvore direita em pós-ordem Percorrer a sub-árvore direita em pós-ordem Visitar a raizVisitar a raiz
Percurso: 1, 3, 2, 5, 7, 6, 4Percurso: 1, 3, 2, 5, 7, 6, 4
4
2 6
31 75
Caminhamento Em-ordemCaminhamento Em-ordem Percorrer a sub-árvore esquerda em pré-ordemPercorrer a sub-árvore esquerda em pré-ordem Visitar a raizVisitar a raiz Percorrer a sub-árvore direita em pré-ordemPercorrer a sub-árvore direita em pré-ordem
Percurso: 1, 2, 3, 4, 5, 6, 7Percurso: 1, 2, 3, 4, 5, 6, 7
4
2 6
31 75
Caminhamento Em NívelCaminhamento Em Nível Percorre-se a árvore em nível de cima Percorre-se a árvore em nível de cima
para baixo e da esquerda para a direita.para baixo e da esquerda para a direita.
Percurso: 4, 2, 6, 1, 3, 5, 7Percurso: 4, 2, 6, 1, 3, 5, 7
4
2 6
31 75
Estrutura de dados de uma Árvore Estrutura de dados de uma Árvore BináriaBinária
4
2 6
31 75
4
2 6
1 3 5 7
null
Referência à sub-árvore da esquerda ou null quando não há filhos
Referência à sub-árvore da esquerda ou null quando não há filhos
Referência à sub-árvore da direitaou null quando não há filhos
Referência à sub-árvore da direitaou null quando não há filhos
ChaveChave
Muitas implementações referenciam o pai no nó
Classe Representando o Nó Classe Representando o Nó public class BSTNode { protected int key; protected BSTNode left, right;
public BSTNode() { left = right = null; } public BSTNode(int num) { this(num,null,null); } public BSTNode(int num, BSTNode lt,
BSTNode rt) { this.key = num; left = lt; right = rt; } public int getKey() {
return key; } public void setKey(int key) {
this.key = key; }
public BSTNode getLeft() {return left;
}public void setLeft(BSTNode left) {
this.left = left;}public BSTNode getRight() {
return right;}public void setRight(BSTNode right) {
this.right = right;} }
Classe Representando a Árvore Classe Representando a Árvore BináriaBinária
public class BST { private BSTNode root = null;
public BST() { } public void clear() { root = null; } public boolean isEmpty() { return root == null; } public BSTNode getRootNode (){ return root; }
Top Related