Árvores Binárias Prof. Ernesto Lindstaedt. Definições Uma árvore binária T é um conjunto...

Post on 17-Apr-2015

119 views 7 download

Transcript of Árvores Binárias Prof. Ernesto Lindstaedt. Definições Uma árvore binária T é um conjunto...

Á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; }