Percurso não recursivo e impressão em árvores binárias Drozdek.

Slides:



Advertisements
Apresentações semelhantes
Visualização do OpenGL
Advertisements

Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de.
TADs Vector, Lista e Sequência
Árvores Passeios.
ABSTRAÇÃO processo de representar um grupo de entidades através de seus atributos comuns feita a abstração, cada entidade particular (instância) do grupo.
Classes C++ Class nome da classe { private: membros privados
Estruturas de Dados Árvores Binárias
Programação II Estruturas de Dados
Aula Teste INFNET terça-feira, 11 de janeiro de 2011
ADT – Arvore Binária de Pesquisa
Java: Comandos Básicos
1 Java: Tratamento de Exceções Alcides Calsavara.
Série de Exercícios.
Pilhas e Filas.
Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar.
Árvores B Implementação pelos FrameWork Bruno Preiss.
Estruturas Fundamentais
Listas Ordenadas e Listas Classificadas. 2 Sumário Fundamentos Listas Ordenadas Listas Classificadas.
Árvores.
Árvores de Busca. 2 Uma árvore que suporta eficientes operações de busca, inclusão e exclusão é chamada de árvore de busca. A árvore é usada para armazenar.
Listas Encadeadas Circulares Listas Duplamente Encadeadas
Filas circulares.
Listas Encadeadas Circulares Listas Duplamente Encadeadas
2008 LCG/UFRJ. All rights reserved. 1 Standard Template Library STL Claudio Esperança Paulo Roma Cavalcanti.
André Lopes Pereira Luiz Carlos Barboza Júnior
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Listas Ligadas – Conceitos Avançados
A.4. Trabalhando com elementos de biblioteca STL – Standard Template Libraby Disponibiliza um conjunto de classes templates, provendo algoritmos eficientes.
Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1.
Capítulo 4 Controle de fluxo. 2Capítulo 4 – Controle de fluxo Controle de fluxo if / else switch / case while do / while for break / continue Instruções.
Orientação a Objetos Classes
Sistemas Operacionais
Introdução A fim de preparar a geração de código, deve-se relacionar o fonte estático do programa às ações em tempo de execução. Durante a execução, o.
TerraRadar Aplicativo para tratamento de imagem de Radar Utilizado através de dois tipos de interface : TerraView - (QT) Browser - (PHP)
Funções definidas pelo usuário STL oferece a possibilidade de que o usuário escreva seus próprios algoritmos para processar os elementos de coleções #include.
1.3 – Interpretadores – Compiladores versus Interpretadores
CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo XI Noções de Estruturas de Dados.
Capítulo V Análise Sintática
1 Definição de Dicionário Dicionário é um sistema de informações: Equivalente a um conjunto de elementos não repetidos Equivalente a um conjunto de elementos.
Rasterização de linhas e polígonos
LINGUAGEM C X LINGUAGEM ASSEMBLY
Linguagens Formais e Tradutores Análise Sintática - 1
Caminhamentos e Construção
Recursividade Estrutura de Dados.
1 Aula 5 Instâncias dinâmicas. 2003/2004 Programação Orientada para Objectos 2 Instâncias… int j = 20; int f() { int const i = 10; // … } Constante automática.
Aula 8 Polimorfismo.
1 Aula 7 Herança. 2003/2004 Programação Orientada para Objectos 2 Conceitos fundamentais: Herança Polimorfismo Ligação dinâmica.
Prof. Ernesto Lindstaedt
Linguagens de Programação
Departamento de Estatística e Informática
Sincronização com Locks. Locks É um mecanismo de sincronização de processos/threads em que estas devem ser programadas de modo que seus efeitos sobre.
Melhorias e Mensagens Amigáveis ao Usuário Centro de Informática Universidade Federal de Pernambuco Bruno Felipe Marco André Paulo Fernando Rodolfo Santos.
Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista Linguagens de Programação Prof. Miguel Elias Mitre Campista
Uma classe para vectores
Principais operações em Listas TPA Listas Simples Inserção no Final 1.void insereNofinalDaLista(Lista *l, Elemento e){ 2.Lista paux,p; 3. p.
Análise Sintática – Parte 1
Scala Bruno Barros e Rebeka Gomes
Java Generics Adeline de Sousa Silva.
Tipos Especiais de Listas
Pilhas Profa. Nádia Félix.
Estruturas de Dados PROFESSOR DIÓGENES FURLAN. Estruturas de Dados (ED) Programas operam sobre dados Dados são relacionados e possuem estrutura Como representar.
Estruturas de Dados Aula 7: Tipos Estruturados 23/04/2014.
Árvores Binárias Profa. Patrícia A. Jaques Luiz Gonzaga Jr
Universidade do Vale do Rio dos Sinos - São Leopoldo -
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Data Flow Testing. Vários critérios de adequação até aqui Baseado em entradas de função (funcional)‏ Baseado na estrutura do programa (estrutural)‏ Baseado.
Data Flow Testing. Vários critérios de adequação até aqui Baseado em entradas de função (funcional)‏ Baseado na estrutura do programa (estrutural)‏ Baseado.
Associação. 2 Desafio – Aula class Aluno { 2. private String nome; 3. private float nota; 4. public Aluno(String nome, float nota){ 5. this.nome.
Introdução a Programação
Função de buscar elemento na lista simplesmente encadeada
Transcrição da apresentação:

Percurso não recursivo e impressão em árvores binárias Drozdek

Implementação Java Drozdek

3 Classe usada para ilustração public class BSTNode { protected int key; protected BSTNode left,right; public BSTNode() { left = right = null; }

4 Percurso Pré-fixo public void iterativePreorder() { BSTNode p = root; Stack travStack = new Stack(); if (p != null) { travStack.push(p); while (!travStack.isEmpty()) { p = (BSTNode) travStack.pop(); visit(p); if (p.right != null) travStack.push(p.right); if (p.left != null) // filho da esquerda empilhado // após o da direita travStack.push(p.left); // para estar no topo da pilha; }

5 Percurso Infixo public void iterativeInorder() { BSTNode p = root; Stack travStack = new Stack(); while (p != null) { while(p != null) { // empilhar filho da direita (se houver) if (p.right != null) // e o próprio nó quando for travStack.push(p.right); // para a esquerda; travStack.push(p); p = p.left; } p = (BSTNode) travStack.pop(); // pop em nó sem filho esquerdo while (!travStack.isEmpty() && p.right == null) { // visita-lo e a todos os nós visit(p); // sem filho direito; p = (BSTNode) travStack.pop(); } visit(p); // visitar também o primeiro nó com if (!travStack.isEmpty()) // um filho direito (se houver); p = (BSTNode) travStack.pop(); else p = null; }

6 Percurso Pós-fixo public void iterativePostorder() { BSTNode p = root, q = root; Stack travStack = new Stack(); while (p != null) { for ( ; p.left != null; p = p.left) travStack.push(p); while (p != null && (p.right == null || p.right == q)) { visit(p); q = p; if (travStack.isEmpty()) return; p = (BSTNode) travStack.pop(); } travStack.push(p); p = p.right; }

7 Impressão de árvores public void printTree (int inicio, int incremento) { int i; if(!isEmpty ()) { right.printTree (inicio + incremento); for(i = 1; i <= inicio; i++) System.out.print(" "); System.out.print(this.key); left.printTree(inicio + incremento); } // End if(isEmpty()) } // printTree (int n)

Implementação C++ Drozdek

9 Classe usada para ilustração template class BSTNode { public: BSTNode() { left = right = 0; } BSTNode (const T& el, BSTNode *l = 0, BSTNode *r = 0) { key = el; left = l; right = r; } T key; BSTNode *left, *right;}; }

10 Percurso Pré-fixo template void BST ::iterativePreorder() { Stack *> travStack; BSTNode *p = root; if (p != 0) { travStack.push(p); while (!travStack.empty()) { p = travStack.pop(); visit(p); if (p->right != 0) travStack.push(p->right); if (p->left != 0) // filho da esquerda // emplilhado depois // do da direita travStack.push(p->left); // para ficar no topo da pilha; }

11 Percurso Infixo template void BST ::iterativeInorder() { Stack *> travStack; BSTNode *p = root; while (p != 0) { while (p != 0) { // empilhar filho da direita (se houver) if (p->right) // e o próprio nó quando for travStack.push(p->right); // para a direita; travStack.push(p); p = p->left; } p = travStack.pop(); // pop em nó sem filho esquerdo while (!travStack.empty() && p->right == 0) { // visita-lo e a todos os nós visit(p); // sem filho direito; p = travStack.pop(); } visit(p); // visitar também o primeiro nó com if (!travStack.empty()) // um filho direito (se houver); p = travStack.pop(); else p = 0; }

12 Percurso Pós-fixo template void BST ::iterativePostorder() { Stack *> travStack; BSTNode * p = root, *q = root; while (p != 0) { for ( ; p->left != 0; p = p->left) travStack.push(p); while (p != 0 && (p->right == 0 || p->right == q)) { visit(p); q = p; if (travStack.empty()) return; p = travStack.pop(); } travStack.push(p); p = p->right; }

13 Impressão de árvores void Tree::PrintTree1(TreeNode *t, short inicio, short incremento) const { int i; if(t == NULL) return; PrintTree1(t->right(),inicio + incremento); for(i = 0; i < inicio; i++) cout << ' '; cout Key() << ", "; cout << endl; PrintTree1(t->left(),inicio + incremento); } void Tree::PrintTree(void) const { PrintTree1(fRoot, inicio, incremento); }