• Nenhum resultado encontrado

EDAula06

N/A
N/A
Protected

Academic year: 2021

Share "EDAula06"

Copied!
19
0
0

Texto

(1)ANHANGUERA ENSINO SUPERIOR Faculdades de Valinhos - FAV Valinhos, maio de 2008. Estrutura de Dados. Prof. Dr. Marcelo Augusto Cicogna. ESTRUTURA DO CURSO ED - AULA 6. 2.  Cronograma de Aulas - Segundo Bimestre  Aula 5: Recursividade • Conceitos básicos • Análise de processos recursivos.  Aula 6: Árvores. Prof. Dr. Marcelo Augusto Cicogna. • Conceitos de árvores binárias • Operações básicas e algoritmos de percurso e busca.  Aula 7: Grafos • Conceitos básicos • Algoritmo de caminho mínimo • Introdução à Programação Dinâmica.  Segunda Avaliação: 12/06/2008  Segunda Substitutiva: 26/06/2008. ©2008 FAV – Estrutura de Dados..

(2) CONTEÚDO ED - AULA 6. 3. Prof. Dr. Marcelo Augusto Cicogna.  Nessa Aula . Introdução. . Motivação. . Definições. . Árvores Binárias. . Árvores de Pesquisa. . Exemplos e Implementação Computacional. EDUC ©2008 FAV – Estrutura de Dados.. 303- 407. INTRODUÇÃO ED - AULA 6. 4.  Árvores Definição:. Prof. Dr. Marcelo Augusto Cicogna. Estrutura de dados não-linear que permite representar uma estrutura hierárquica. Citação do livro EDSA: “Em diversas aplicações, necessita-se de estruturas mais complexas do que puramente seqüenciais... Entre essas, destacam-se as árvores, por existirem inúmeros problemas práticos que podem ser modelados através delas. Além disso, as árvores, em geral, admitem um tratamento computacional simples e eficiente.”. Aplicações: a) Estrutura de arquivos em disco b) Organização de uma empresa c) Árvore genealógica d) Estruturação de livros e) Estruturação de Universidades f) Expressões aritméticas. ©2008 FAV – Estrutura de Dados.. EDSA 61- 62.

(3) MOTIVAÇÃO ED - AULA 6. 5.  Exemplo de Árvore Estrutura de arquivos em disco:. Prof. Dr. Marcelo Augusto Cicogna. Diretório Raiz. Meus Documentos. Minhas Imagens. Foto 1. Minhas Webs. Foto 2. Música 1. Minhas Músicas. Música 2. Música 3. ©2008 FAV – Estrutura de Dados.. MOTIVAÇÃO ED - AULA 6. 6.  Exemplo de Árvore Organização de uma empresa:. Prof. Dr. Marcelo Augusto Cicogna. Presidente. Diretoria Financeira. ©2008 FAV – Estrutura de Dados.. Diretoria Marketing. Diretoria Vendas.

(4) MOTIVAÇÃO ED - AULA 6. 7.  Exemplo de Árvore Expressões aritméticas:. Prof. Dr. Marcelo Augusto Cicogna. +. 5. *. +. 3. -. 6. 4. 1. Árvore da expressão: (3 + 6) * (4 - 1) + 5 ©2008 FAV – Estrutura de Dados.. DEFINIÇÕES ED - AULA 6. 8.  Terminologia e (Exemplos) Quanto aos Nós:. A. Raiz: nó de origem da árvore (A). Pai: nó que possui sub-árvores (A, C e F).. B. C. Interno: nó que possui filhos (A, C e F). Externo: nó que não possui filhos (B, E, G e H).. E. F. G. Prof. Dr. Marcelo Augusto Cicogna. Folha: mesmo que nó externo. Nível: número de nós do caminho da raiz até o nó. Nível de (B e C) = 2; (E, F e G) = 3 e H = 4. H. Obs.: A raiz tem nível igual a 1 (A). Altura: número de nós do maior caminho de um nó até seus descendentes. Altura de A = 4, C = 3 e (B, E, e G) = 1. Obs.: As Folhas têm altura igual a 1. Grau: número de sub-árvores de um nó. Grau de C = 3, A = 2, F = 1 e (B, E, e G) = 0. Obs.: O grau de nós folha é igual a zero.. ©2008 FAV – Estrutura de Dados.. Essas definições podem variar de um autor para outro. Por exemplo, podese ter definições de raiz com nível 0 e folha com altura 0.. EDUC 303- 307.

(5) DEFINIÇÕES ED - AULA 6. 9.  Terminologia e (Exemplos) Quanto à Árvore:. A. Grau: máximo grau de todos os nós da árvore. Grau da árvore = 3 (nó C).. B. C. Altura: igual ao nível máximo de seus nós.. Prof. Dr. Marcelo Augusto Cicogna. Altura da árvore = 4 (nós H).. Essas definições podem variar de um autor para outro. Por exemplo, se uma folha tem altura 0, então a árvore do exemplo acima tem altura igual a 3.. E. F. G. H. EDUC ©2008 FAV – Estrutura de Dados.. 303- 307. ÁRVORES BINÁRIAS ED - AULA 6. 10.  Árvores Binárias Definições: Uma Árvore Estritamente Binária é formada a partir de um conjunto finito de nós, os quais possuem exatamente 0 ou 2 filhos.. Prof. Dr. Marcelo Augusto Cicogna. Uma Árvore Binária é formada a partir de um conjunto finito de nós, os quais possuem exatamente 0, 1 ou 2 filhos.  Árvores Binárias de Pesquisa Definição: Uma Árvore Binária de Pesquisa é uma árvore binária em que todo nó interno contém um registro e, para cada nó, a seguinte propriedade é verdadeira: a) todos os registros com chaves menores estão na sub-árvore esquerda; b) todos os registros com chaves maiores estão na sub-árvore direita. EDUC ©2008 FAV – Estrutura de Dados.. 303- 316.

(6) ÁRVORES BINÁRIAS DE PESQUISA ED - AULA 6. 11.  Exemplo de Construção. 5. 3. 2. 7. Regra:. 6. 4. 5. A definição de Árvore Estritamente Binária pode ser justificada devido aos arcos nulos que cada nó possui, sempre em número de 2 arcos.. a) menores - esquerda; b) maiores - direita.. 7. Prof. Dr. Marcelo Augusto Cicogna. 3 4. 2. 1. 6. 1 Arco Nulo EDUC 312- 316. ©2008 FAV – Estrutura de Dados.. ÁRVORES BINÁRIAS DE PESQUISA ED - AULA 6. 12.  Propriedades da Regra de Construção. 5. 3. 2. 7. Nova Regra:. 6. 4. 1. 5. a) menores - direita;. Prof. Dr. Marcelo Augusto Cicogna. b) maiores - esquerda.. 7. 3 6. 4. 1 Arco Nulo. ©2008 FAV – Estrutura de Dados.. 2.

(7) ÁRVORES BINÁRIAS: TIPOS ED - AULA 6. 13.  Exercício  Definição. Prof. Dr. Marcelo Augusto Cicogna. TDataInt Adapte o TAD TData apresentado na ED Aula 2 para um conteúdo composto por apenas um valor inteiro (val).. //Definição do tipo TData. typedef struct TData { int val; } TData;. Veja ao lado a definição do novo tipo TData. Dica Utilize o módulo TDataChar criado para o TAD TStack. Crie uma cópia dos arquivos TDataChar.h e TDataChar.c renomeando para TDataInt.*. ©2008 FAV – Estrutura de Dados.. EXERCÍCIOS EM LABORATÓRIO ED - AULA 6. 14. 7) Listas Encadeadas  Converter o TAD TData criado para o uso de pilhas (TDataChar.*) para um TAD que utilize apenas um valor inteiro (val).  As funções devem fazer parte de um módulo de dados e funções constituído de um arquivo de cabeçalho denominado TDataInt.h e um arquivo de código fonte denominado TDataInt.c.. Prof. Dr. Marcelo Augusto Cicogna.  Salve os arquivos TDataInt.* na pasta Comum.. ©2008 FAV – Estrutura de Dados..

(8) ÁRVORES BINÁRIAS: TIPOS ED - AULA 6. 15.  Representação Gráfica. Prof. Dr. Marcelo Augusto Cicogna. 5. Nó (Node) Formado por um campo com dados e dois ponteiros (uma referência para outro nó) para as sub-árvores à esquerda e direita. Tipos Definir usando pseudo-código tipos de dados que representem um nó e uma árvore binária..  Pseudo-código record TNode { TData data; TNodePointer esq, dir; } record TBinTree { TNodePointer root; }. ©2008 FAV – Estrutura de Dados.. ÁRVORES BINÁRIAS: TIPOS ED - AULA 6. 16.  Nó de uma Lista. Prof. Dr. Marcelo Augusto Cicogna. 5. TNode Através da definição de um nó (node) de uma árvore binária, devemos criar um tipo para representar os elementos que formam uma árvore. struct Nesse caso, o elemento node possui duas referências a própria struct TNode.. ©2008 FAV – Estrutura de Dados..  Linguagem C. TNodeBin.h. #include “TDataInt.h” //Definição do tipo TNode. typedef struct TNode { //Informação. TData* pData; //Referência para as sub-árvores. struct TNode* esq; struct TNode* dir; } TNode;. Note que, em relação aos TAD TList e TStack, o tipo TNode possui duas referências para outras variáveis TNode. São essas duas referências que fornecem a característica de não linearidade para o tipo TBinTree..

(9) ÁRVORES BINÁRIAS: TIPOS ED - AULA 6. 17.  Tipo Árvore Binária  Linguagem C. TBinTree.h. Prof. Dr. Marcelo Augusto Cicogna. #include “TNodeBin.h”. TBinTree Através da definição de um nó (node) de uma árvore binária, devemos criar um tipo para representar uma árvore como uma coleção de variáveis node. Isso é feito fazendo referência ao primeiro node, chamado root.. //Definição do tipo TBinTree. typedef struct TBinTree { TNode* root; } TBinTree;. struct Em linguagem C usamos struct para criar tipos definidos pelo usuário.. Note que, semelhante aos TAD TList e TStack, o tipo TBinTree possui apenas um ponteiro para uma variável TNode que representa o “primeiro” nó da árvore. O nó root é equivalente ao nó sentinela visto anteriomente.. ©2008 FAV – Estrutura de Dados.. MODULARIZAÇÃO ED - AULA 6. 18.  Estrutura dos Módulos para TBinTree. Prof. Dr. Marcelo Augusto Cicogna. TDataInt.h. TNodeBin.h. TBinTree.h. #include “TDataInt.h”. #include “TNodeBin.h”. TDataInt.c. TNodeBin.c. TBinTree.c. #include “TDataInt.h”. #include “TNodeBin.h”. #include “TBinTree.h”. ©2008 FAV – Estrutura de Dados.. MainBinTree.c. Pasta Comum. #include “TBinTree.h”. Pasta TBinTree.

(10) MODULARIZAÇÃO ED - AULA 6. 19. Prof. Dr. Marcelo Augusto Cicogna.  Tipo Abstrato de Dados: TNodeBin.h. TNodeBin.h. //-----------------------------------------------------------------------------#ifndef TNodeBinH #define TNodeBinH //-----------------------------------------------------------------------------#include "TDataInt.h" //-----------------------------------------------------------------------------/** Definição de TNode como um Tipo Abstrato de Dados. */ typedef struct TNode { No arquivo TNodeBin.h vão TData* pData; todas as declarações de struct TNode* esq; constantes, tipos definidos pelo struct TNode* dir; usuário, funções, e } TNode; procedimentos. //-----------------------------------------------------------------------------Note que o módulo TNodeBin // Funções de gerenciamento do TAD TNode para Árvore Binária. possui uma dependência do TNode* nodeCreate(); módulo TData, uma vez que void nodeFree(TNode* pNode); existe um: int nodeComp(TNode* pNodeA, TNode* pNodeB); #include “TDataInt.h” int nodeCount(TNode* pNode); no arquivo TNodeBin.h. int nodeCountLeaves(TNode* pNode); int nodeCountInternals(TNode* pNode); A lista de funções ao lado foi int nodeHeight(TNode* pNode); feita baseando-se nos exercícios //-----------------------------------------------------------------------------da Quinta Lista. #endif. ©2008 FAV – Estrutura de Dados.. MODULARIZAÇÃO ED - AULA 6. 20. Prof. Dr. Marcelo Augusto Cicogna.  Tipo Abstrato de Dados: TNodeBin.c //-----------------------------------------------------------------------------// Material de Apoio // // Unidade que define um Tipo Abstrato de Dados denominado TNode e suas funções // de gerenciamento e manipulação. Versão para Árvores Binárias // Autor: Marcelo Augusto Cicogna. // // Revisões: // 18/01/2007: Criação do módulo. //-----------------------------------------------------------------------------#include "TNodeBin.h" #include <stdio.h> //-----------------------------------------------------------------------------//Funções de gerenciamento do TAD TNode. //-----------------------------------------------------------------------------TNode* nodeCreate() /** Função para a criação (alocação dinâmica) de uma variável TNode. @return Ponteiro para a variável TNode alocada em memória. Em caso de falha, retorno igual a NULL. @see BinTree.#dataCreate dataCreate() @see BinTree.#dataDefault dataDefault() @version 1.01 @author Marcelo Augusto Cicogna */ { TNode* pNode = malloc(sizeof(TNode)); if (pNode != NULL) { //Cria uma variável TData com opções default. pNode->pData = dataCreate(); dataDefault(pNode->pData); .... ©2008 FAV – Estrutura de Dados.. TNodeBin.c. No arquivo TNodeBin.c vão todas as definições de constantes, tipos definidos pelo usuário, funções, e procedimentos. É importante fazer o primeiro include do próprio módulo, ou seja, nesse caso: #include “TNodeBin.h” O código abaixo demonstra apenas o início da função nodeCreate(). As demais funções seriam implementadas na seqüência..

(11) ÁRVORES BINÁRIAS: ALGORITMOS ED - AULA 6. 21.  Algoritmo de Criação  Pseudo-código. Prof. Dr. Marcelo Augusto Cicogna. Create() Criar uma lista utilizando um nó principal/raiz. Este nó, diferentemente do apresentado para listas e pilhas, armazena informações.. //Algoritmo para criar uma árvore //binária usando um node root.. TBinTree binTreeCreate() { new (binTree.root); Uma árvore é considerada binTree.root.esq := NULL; vazia se possui apenas o nó binTree.root.dir := NULL; principal/raiz e este não possui return (binTree); informações. }. ©2008 FAV – Estrutura de Dados.. ÁRVORES BINÁRIAS: ALGORITMOS ED - AULA 6. 22. Prof. Dr. Marcelo Augusto Cicogna.  Implementação: Criação de TNode TNode* nodeCreate() /** Função para criação de um novo node. @return node ponteiro para uma variavel node. @see BinTree.#dataCreate dataCreate() @see BinTree.#dataDefault dataDefault() */ { TNode* pNode = malloc(sizeof(TNode)); if (pNode) { //Cria uma variável TData com opções default. pNode->pData = dataCreate(); dataDefault(pNode->pData); //Por default, não existem sub-árvores. pNode->esq = NULL; pNode->dir = NULL; } return (node); }. ©2008 FAV – Estrutura de Dados.. TNodeBin.c. Como a implementação do TAD Árvore Binária não utiliza o conceito de nó sentinela, a criação de variáveis do tipo TNode coloca valores default na informação gerenciada por pData..

(12) ÁRVORES BINÁRIAS: ALGORITMOS ED - AULA 6. 23. Prof. Dr. Marcelo Augusto Cicogna.  Implementação: Criação de TBinTree. TBinTree.c. TBinTree* binTreeCreate(TData* pData) /** Função para criação de uma nova árvore binária. É necessário fornecer um valor para o primeiro nó. @param pData variável do tipo TData para compor o nó raíz (root). @return ponteiro para uma árvore binária. @see BinTree.#dataCopy dataCopy() */ { TBinTree* pBinTree = malloc(sizeof(TBinTree)); if (pBinTree != NULL) { //Alocação do node raíz. TNode* pNode = nodeCreate(); //Copia no novo nó o valor data passado como parâmetro. dataCopy(pNode->pData, pData); //Associa o novo nó ao root da árvore binária. pBinTree->root = pNode; } return (pBinTree); }. ©2008 FAV – Estrutura de Dados.. ÁRVORES BINÁRIAS: ALGORITMOS ED - AULA 6. 24.  Algoritmo de Varredura. Prof. Dr. Marcelo Augusto Cicogna.  Pseudo-código Free() Para apagar os nós de uma árvore binária faz-se uso de um processo recursivo. Somente quando as referências esq e dir forem nulas, apaga-se o nó (nó folha). Observação: Apresenta-se um algoritmo recursivo para o processo de remoção.. ©2008 FAV – Estrutura de Dados.. //Algoritmo para liberar memória de um nó //e seus filhos de uma árvore binária. nodeFree(TNode node) { //Se existir sub-árvore à esquerda. if (node.esq != NULL) nodeFree(node.esq); //Se existir sub-árvore à direita. if (node.dir != NULL) nodeFree(node.dir); //Apagar node. free(node); }.

(13) ÁRVORES BINÁRIAS: ALGORITMOS ED - AULA 6. 25. Prof. Dr. Marcelo Augusto Cicogna.  Implementação Varredura: liberar memória. TNodeBin.c. void nodeFree(TNode* pNode) /** Função para liberação de memória alocada para um nó e seus filhos de uma árvore binária. Função recursiva por meio do parâmetro pNode. @param pNode ponteiro para um nó da árvore binária a partir do qual se inicia o processo de liberação de memória alocada. @return Não há retorno */ { if (pNode == NULL) return; //Se existir sub-árvore à esquerda. if (pNode->esq != NULL) nodeFree(pNode->esq); //Se existir sub-árvore à direita. if (pNode->dir != NULL) nodeFree(pNode->dir); //Apagar dados de pNode. if (pNode->pData); dataFree(pNode->pData); //Liberar memória alocada para a variável TNode. free(pNode); }. ©2008 FAV – Estrutura de Dados.. ÁRVORES BINÁRIAS: ALGORITMOS ED - AULA 6. 26.  Implementação Varredura: liberar memória. TBinTree.c. Prof. Dr. Marcelo Augusto Cicogna. //Função para liberar a memória alocada para uma árvore binária. //Uso da função recursiva nodeFree(). void binTreeFree(TBinTree* pBinTree) /** Função para liberação de memória alocada para uma árvore binária. @param binTree ponteiro para uma árvore binária (a ser liberada da memória). @return Não há retorno. @see BinTree.#nodeFree nodeFree() @version 1.01 @author Marcelo Augusto Cicogna */ { if (pBinTree) { //Liberar memória a partir do nó raiz. nodeFree(pBinTree->root); free(pBinTree); } }. ©2008 FAV – Estrutura de Dados..

(14) ÁRVORES BINÁRIAS DE PESQUISA ED - AULA 6. 27.  Algoritmo de Inserção. Prof. Dr. Marcelo Augusto Cicogna.  Pseudo-código Insert() Para inserir um elemento em uma árvore binária de pesquisa, deve-se proceder uma busca pelo nó pai que respeita a regra de menores à esquerda e maiores a direita. Observação: Apresenta-se um algoritmo recursivo para o processo de inserção.. //Algoritmo para Inserção em Árvore Binária. binTreeInsert(TNode node, TData data) { //Teste a esquerda. if ( dataComp(data, node.data) < 0 ) if (!node.esq) { new (nodeAux); dataCopy(nodeAux.data, data); node.esq := nodeAux; } else binTreeInsert(node.esq, data); //Teste a direita. else if (!node.dir) { new (nodeAux); dataCopy(nodeAux.data, data); node.dir := nodeAux; } else binTreeInsert(node.dir, data); }. ©2008 FAV – Estrutura de Dados.. ÁRVORES BINÁRIAS DE PESQUISA ED - AULA 6. 28. Prof. Dr. Marcelo Augusto Cicogna.  Implementação: Inserção 1/2 void binTreeInsertNode(TNode* pNode, TData* pData) /** Função para inserção de um novo nó em uma árvore binária. Função recursiva por meio do parâmetro pNode. @param pNode ponteiro para um nó da árvore binária. @param pData ponteiro para uma variável do tipo TData a ser inserida. @return Não há retorno @see BinTree.#dataCopy dataCopy() */ { TNode* pNodeAux; if (pNode != NULL) { //Se for para inserir do lado esquerdo. if ( dataComp(pData, pNode->pData, 0) < 0 ) { //Inserir se o arco esquerdo for nulo. if (pNode->esq == NULL) { pNodeAux = nodeCreate(); dataCopy(pNodeAux->pData, pData); pNode->esq = pNodeAux; } //Caso contrário, tentar inserir na sub-árvore a esquerda (recursivo). else binTreeInsertNode(pNode->esq, pData); } .... ©2008 FAV – Estrutura de Dados.. TBinTree.c.

(15) ÁRVORES BINÁRIAS DE PESQUISA ED - AULA 6. 29. Prof. Dr. Marcelo Augusto Cicogna.  Implementação: Inserção 2/2. TBinTree.c. //Continuação... void binTreeInsertNode(TNode* pNode, TData* data) { ... //Se for para inserir do lado direito. else { //Inserir se o arco direito for nulo. if (pNode->dir == NULL) { pNodeAux = nodeCreate(); dataCopy(pNodeAux->pData, pData); pNode->dir = pNodeAux; } //Caso contrário, tentar inserir na sub-árvore a direita (recursivo). else binTreeInsertNode(pNode->dir, pData); } } }. ©2008 FAV – Estrutura de Dados.. ÁRVORES BINÁRIAS DE PESQUISA ED - AULA 6. 30.  Algoritmo de Busca. Prof. Dr. Marcelo Augusto Cicogna.  Pseudo-código Busca() Para encontrar um valor em uma árvore binária, utiliza-se um processo recursivo. Utilizase uma variável (found) por referência para determinar o sucesso ou falha na busca. Observação: Apresenta-se um algoritmo recursivo para o processo de remoção.. ©2008 FAV – Estrutura de Dados.. //Algoritmo para busca em uma árvore binária. TNode binTreeBusca(TNode node, TData data) { //Se node nulo, então é folha e não achou. if ((node = NULL) or (data = NULL)) nodeF := NULL; //Caso contrário, ativar recursão. else { //Comparar data com o conteúdo do node. comp := dataComp(data, node.data); //Se encontrou, retornar como sucesso. if (comp = 0) nodeF := node; //Se for menor e sub-árvore à esquerda. else if ((comp < 0) and (node.esq != NULL)) nodeF := binTreeBusca(node.esq, data); //Se for maior e sub-árvore à direita. else if ((comp > 0) and (node.dir != NULL)) nodeF := binTreeBusca(node.dir, data); } return (nodeF); }.

(16) ÁRVORES BINÁRIAS DE PESQUISA ED - AULA 6. 31. Prof. Dr. Marcelo Augusto Cicogna.  Algoritmo de Varredura em Pré-Ordem // Varredura em Árvore Binária de Pesquisa. // Percorre com visita aos nós em PRE Ordem. void varrePreOrdem(TNode node) { visita(node); if (node.esq) varrePreOrdem(node.esq); if (node.dir) varrePreOrdem(node.dir); }. EDUC 312- 316. ©2008 FAV – Estrutura de Dados.. ÁRVORES BINÁRIAS DE PESQUISA ED - AULA 6. 32.  Exemplo de Varredura Pre-Ordem. 5. Arco Nulo. Pre-Ordem: a) vis(). 7. 3. Prof. Dr. Marcelo Augusto Cicogna. b) esq c) dir. 2. 4. 6. 1. 4. 1. 5. 3. ©2008 FAV – Estrutura de Dados.. 2. 7. 6.

(17) ÁRVORES BINÁRIAS DE PESQUISA ED - AULA 6. 33. Prof. Dr. Marcelo Augusto Cicogna.  Algoritmo de Varredura: In-Ordem (simétrica) // Varredura em Árvore Binária de Pesquisa. // Percorre com visita aos nós em IN Ordem. void varreInOrdem(TNode node) { if (node.esq) varreInOrdem(node.esq); visita(node); if (node.dir) varreInOrdem(node.dir); }. EDUC 312- 316. ©2008 FAV – Estrutura de Dados.. ÁRVORES BINÁRIAS DE PESQUISA ED - AULA 6. 34.  Exemplo de Varredura In-Ordem. 5. Arco Nulo. In-Ordem: a) esq. 7. 3. Prof. Dr. Marcelo Augusto Cicogna. b) vis() c) dir. 4. 2. 6 Resultado da Varredura. 1. 1. 2. ©2008 FAV – Estrutura de Dados.. Valores Ordenados. 3. 4. 5. 6. 7.

(18) ÁRVORES BINÁRIAS DE PESQUISA ED - AULA 6. 35. Prof. Dr. Marcelo Augusto Cicogna.  Algoritmo de Varredura em Pós-Ordem // Varredura em Árvore Binária de Pesquisa. // Percorre com visitas aos nós em POS Ordem. void varrePosOrdem(TNode node) { if (node.esq) varrePosOrdem(node.esq); if (node.dir) varrePosOrdem(node.dir); visita(node); }. EDUC 312- 316. ©2008 FAV – Estrutura de Dados.. ÁRVORES BINÁRIAS DE PESQUISA ED - AULA 6. 36.  Exemplo de Varredura Pos-Ordem. 5. Arco Nulo. Pos-Ordem: a) esq. 7. 3. Prof. Dr. Marcelo Augusto Cicogna. b) dir c) vis(). 4. 2. 6 Resultado da Varredura. 1. 1. 2. ©2008 FAV – Estrutura de Dados.. Primeiro os descendentes. 4. 3. 6. 7. 5.

(19) ÁRVORES BINÁRIAS DE PESQUISA ED - AULA 6. 37.  Implementação: Impressão em Pré, In e Pós Ordem. Prof. Dr. Marcelo Augusto Cicogna. void binTreePrintPreOrdem(TNode* pNode) { if (!pNode) return; dataPrint(pNode->pData); if (pNode->esq) binTreePrintPreOrdem(pNode->esq); if (pNode->dir) binTreePrintPreOrdem(pNode->dir); } void binTreePrintInOrdem(TNode* pNode) { if (!pNode) return; if (pNode->esq) binTreePrintInOrdem(pNode->esq); dataPrint(pNode->pData); if (pNode->dir) binTreePrintInOrdem(pNode->dir); } void binTreePrintPosOrdem(TNode* pNode) { if (!pNode) return; if (pNode->esq) binTreePrintPosOrdem(pNode->esq); if (pNode->dir) binTreePrintPosOrdem(pNode->dir); dataPrint(pNode->pData); }. ©2008 FAV – Estrutura de Dados.. TBinTree.c.

(20)

Referências

Documentos relacionados

[r]

Resumo: O presente trabalho tem por objetivo, apresentar sucintamente como se deu a inserção do conteúdo de função na matemática do ensino secundário escolar brasileiro.

(3) Repete-se a pesquisa para os próximos termos até que o último tenha sido pesquisado, ou até que a lista esteja vazia, indicando que a frase não foi encontrada. Quanto menor for

Recorrendo aos ensinamentos de Lampreia (1981:86), “as relações públicas internas, também chamadas relações humanas na empresa, funcionam como elo de ligação entre

Como referi anteriormente, este evento conta com 10 tasquinhas dinamizadas por freguesias e instituições do concelho, a Câmara cede-lhes o espaço para que estes, através da

Para fechar este novo desenvolvimento com certeza que o novo material Polipropileno PPGF35(TECNOPRENE AK7 HCT) poderia ser aprovado para uma aplicação tão crítica

Vou expor, na medida do possível, parte da conversa na qualificação que considero interessante para 

Estudo do Meio (Descoberta das inter-relações entre espaços: o contacto entre a terra e o mar.. Exemplo de abordagem Articulação com conteúdos