70 likes | 165 Views
Árvores. Passeios. Árvores - Passeios. Realizar um passeio numa árvore binária deve ser entendido como visitar de forma sistemática, cada um de seus nós, desenvolvendo um certo processamento. Podemos considerar quatro tipos de passeios: Em-ordem
E N D
Árvores Passeios
Árvores - Passeios • Realizar um passeio numa árvore binária deve ser entendido como visitar de forma sistemática, cada um de seus nós, desenvolvendo um certo processamento. Podemos considerar quatro tipos de passeios: • Em-ordem • Pré-ordem (também conhecido como passeio em profundidade) • Pós-ordem • Em-nível
Árvores - Passeios • Para facilitar a compreensão dos três primeiros tipos, vamos utilizar um analogia com as notações que uma expressão aritmética pode ser escrita: infixa, prefixa e pósfixa.
Árvores - Passeios • Pela análise na figura da representação da expressão A + B como árvore binária e a analogia realizada a partir dela, percebemos que a seqüência básica de acesso ERD pode ser generalizada • Na verdade, cada subárvore não precisa se restringir a uma única folha: • Exibir a subárvore esquerda ( E) • Exibir a raiz ( R) • Exibir a subárvore direita ( D ) • Podemos observar que a seqüência ERD tornou-se recursivas • Ambas as subárvores devem ser impressas também em-ordem e a recursão pára quando chegamos a subárvores nulas • As seqüências pré-ordem e pós-ordem podem ser generalizadas segundo o mesmo raciocínio
Árvores – Passeios - Implementação • O método para o passeio em ordem. Para os outros, basta alterar a posição da operação a ser realizada. // Métodos da classe Node public void inorder(Node t) { if (t!=NULL){ inorder(t.left); /* Alguma operação com o valor do nó */ inorder(t.right); } }
Árvores – Passeio em Nível • Parece ser o de mais fácil compreensão • Entretanto, sua implementação é a mais complexa. • Supondo que ele fosse aplicado à árvore da figura abaixo, obteríamos s seqüência: d,b,e,a,c,f • Observe que agora os nós são acessados, por nível, da esquerda para a direita
Árvores – Passeio em Nível • Podemos usar uma fila contendo inicialmente apenas o nó raiz • A partir daí, enquanto a fila não se tornar vazia, retiramos dela um nós cujos filhos deverão ser colocados na fila, aí então, o nó retirado da fila pode ser exibido. // Métodos da classe Node void inlevel(Node t) { if (t!=null){ Queue q = new Queue(); q.Enqueue(t); while (q.Count > 0){ Node n = q.Dequeue() as Node; if (n.left!=null) q.Enqueue(n.left); if (n.right!=null) q.Enqueue(n.right); /* Alguma operação com o valor do nó */ } } }