struct arv { char info; struct arv* esq; struct arv* dir; };



Documentos relacionados
Estruturas de Dados Aula 15: Árvores 17/05/2011

INF1007: Programação 2 10 Árvores Binárias. (c) Dept. Informática - PUC-Rio 1

Métodos Computacionais. Árvores

Linguagem C: Árvores Binarias

INF 1007 Programação II

Fontes Bibliográficas. Estruturas de Dados Aula 15: Árvores. Livros:

Figura 13.1: Um exemplo de árvore de diretório.

Busca. Pesquisa sequencial

Estruturas de Dados. Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos

INF PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 15

Estruturas de Dados Aula 16: Árvores com Número Variável 13/06/2011

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 CES-11 CES-11

Estruturas de Dados I

Árvore Binária Exemplo de Implementação

EAD Árvore árvore binária

Estruturas de Dados Aula 11: TAD Pilha 09/05/2011

Árvores Binárias de Busca

Árvores Binária de Busca. Prof. César Melo DCC/ICE/UFAM

DAINF - Departamento de Informática

Árvores Binárias - continuação

Árvore Binária de Busca. Prof. César Melo

ESTRUTURA DE DADOS DCC013

Árvores. Prof. César Melo DCC/ICE/UFAM

Árvores. Prof. César Melo DCC/ICE/UFAM

Pesquisa Sequencial e Binária

ÁRVORES BINÁRIAS DE BUSCA. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Aula 08. Estruturas de dados Árvore e Grafo

ÁRVORE BINÁRIA DE BUSCA

Árvores Binárias de Busca (ABB) 18/11

ESTRUTURAS DE DADOS I. Notas de Aula. Prof. Dr. Gilberto Nakamiti

Árvore Binária de Busca

INF 1010 Estruturas de Dados Avançadas. Árvores binárias

Estruturas de Dados. Árvores AVL. Cesar Tadeu Pozzer. Curso de Ciência da Computação UFSM (12/12/2007)

Estruturas de Dados. Módulo 17 - Busca. 2/6/2005 (c) Dept. Informática - PUC-Rio 1

EAD Árvore - representação usando listas ligadas

Árvores Binárias. 16/11 Representação e Implementação: Encadeada Dinâmica O TAD

Algoritmos e Estruturas de Dados: Árvore Binária

Algoritmos e Estruturas de Dados 2

Métodos Computacionais. Fila

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

1. Introdução Definição Conceitos relacionados... 2

ESTRUTURAS DE DADOS AVANÇADAS (INF 1010) (a) Seja um TAD definido por uma lista circular implementada em um vetor.

Árvores. Algoritmos e Estruturas de Dados 2005/2006

INF 1620 P2-01/11/03 Questão 1 Nome:

Árvores Binárias. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich

Pesquisa em Memória Primária. Algoritmos e Estruturas de Dados II

Arvores, Percursos não recursivos, Arvores heterogêneas. Aula 19

Listas (Parte 2) Túlio Toffolo BCC202 Aula 10 Algoritmos e Estruturas de Dados I

Árvores Binárias. Observação: Material elaborado a partir do material do Professor Marcos Costa.

Estruturas de Dados. Módulo 13 - Árvores. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

INF 1010 Estruturas de Dados Avançadas

/*(Atenção: Em se tratando de uma lista estaticamente alocada, temos utilizado a estratégia de passa o tamanho máximo do vetor.)*/

INF 1007 Programação II

As duas soluções a seguir são exemplos da variedade de soluções admissíveis.

Árvores Binárias de Busca (ABB) 18/11

Estruturas de Dados Aula 10: Listas (parte 2) 19/04/2011

Pilhas. Fabrício J. Barth. BandTec - Faculdade de Tecnologia Bandeirantes

Árvores binárias de pesquisa com balanceamento. Algoritmos e Estruturas de Dados II

2ª Lista de Exercícios

Árvores Binárias de Busca

Pilhas e Filas Encadeadas. Algoritmos e Estruturas de Dados I

Aula T13 BCC202 Árvores. Túlio Toffolo

Departamento de Informática - PUC-Rio INF 1007 Programação 2 P3 23/06/2010

Árvores. Prof. César Melo ICOMP/UFAM

Busca em Memória. Secundária

Programação II. Árvores Binárias (Binary Trees) Bruno Feijó Dept. de Informática, PUC-Rio

Estruturas de Dados. Parte dos slides a seguir são adaptações, extensões e traduções para C dos originais:

Departamento de Informática - PUC-Rio INF 1007 Programação 2 P4 07/12/2010

Complexidade de Algoritmos

PROGRAMAÇÃO II 4. ÁRVORE

Estruturas de Dados. Módulo 11 Pilhas. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Árvores Binárias de Pesquisa. Programação II Prof. Mateus Raeder. Árvores Binárias de Pesquisa. Árvores Binárias de Pesquisa. Classe Nodo Binário

Estruturas de Dados Aula 11: TAD Pilha

ESTRUTURAS DE DADOS II MSc. Daniele Carvalho Oliveira

Árvores & Árvores Binárias

Árvores Binárias e Busca. Jeane Melo

Pesquisa digital. Algoritmos e Estruturas de Dados II

Módulo 9. Pesquisa em Memória Primária. Algoritmos e Estruturas de Dados II C++ (Rone Ilídio)

Transcrição:

Estruturas Árvores 05/05/2008 Aula de (parte 16: Informação 2) ÁrvoreBinária Umaárvoreemquecadanótem Umaárvorebináriaé: umaárvorevazia; a nóraizcom subárvoredadireita(sad) subárvoredaesquerda(sae) duassub-árvores: ou zero, um oudoisfilhos Fontes Livros: Introdução Bibliográficas Slides disponível Projeto Estruturas Algorithms (Szwarefiter, Cerqueira de e Algoritmos de in a Rangel): Estruturas et. C Dados (Sedgewick): al): e Capítulo (Nivio seus de Dados Algoritmos Ziviani): Capítulo 13; (Celes, rio.br/~inf1620/. baseados em http://www.inf.puc- no material da PUC-Rio, Capítulo 5; 5; ÁrvoresBinárias ImplementaçãoemC Representação: Representaçãode Estrutura A Dois inteiro) informação ponteiros em C ponteiroparao propriamente contendo para um nónaárvore: sub-árvores, dita (exemplo: nóraiz àesquerda um caractere, e àdireitaou struct arv char info; struct arv* esq; struct arv* dir; ;

TAD ÁrvoresBinárias Impl. emc (arv.h) typedef struct arv Arv; //Cria uma árvore vazia Arv* arv_criavazia (void); //cria uma árvore com a informação do nó raiz c, e //com subárvore esquerda e e subárvore direita d TAD Arv* arv_cria (char c, Arv* e, Arv* d); //libera funçãoarv_libera o espaço de memória ocupado pela árvore a Arv* (Arv* a); //retorna true se a estiver vazia e false //caso contrário int retornaumaárvorevazia, liberamemóriaalocadapelaestruturadaárvore ÁrvoresBinárias ImplementaçãoemC as raizsub-árvoresdevemser arv_vazia (Arv* a); representadapornull liberadasantes de liberaro nó //indica a ocorrência (1) ou não (0) do caracter c int arv_pertence (Arv* a, char c); //imprime informações dos nós void arv_imprime (Arv* a); Arv* arv_libera (Arv* a) if (!arv_vazia(a)) arv_libera(a->esq); /* libera sae */ arv_libera(a->dir); /* libera sad */ free(a); /* libera raiz */ return NULL; TAD funçãoarv_cria criaum retornao ÁrvoresBinárias ImplementaçãoemC a daesquerdae nóraizdadasa endereçodo a dadireita nóraizcriado informaçãoe duassub-árvores, TAD funçãoarv_vazia indicase ÁrvoresBinárias ImplementaçãoemC umaárvoreéounãovazia Arv* arv_cria (char c, Arv* sae, Arv* sad) Arv* p=(arv*)malloc(sizeof(arv)); p->info = c; p->esq = sae; p->dir = sad; return p; int arv_vazia (Arv* a) return a==null;

TAD ÁrvoresBinárias ImplementaçãoemC TAD ÁrvoresBinárias ImplementaçãoemC funçãoarv_pertence verificaa retornaum ounãodo ocorrênciade caracterenaárvore valor booleano(1 um caracterec ou0) indicandoa emum de ocorrência nós funçãoarv_imprime percorrerecursivamentea nóse imprimindosuainformação árvore, visitandotodosos Ordemde Binárias Pré-ordem: Ordemsimétrica(ouIn-Ordem): trataraiz, Percurso(outravessia) a b percorresae, d trataraiz, d a c e e f percorresad Árvores Pós-ordem: percorresae, exemplo: d b percorresad, e f c a trataraizbdaef c Ordemde Fazer In-ordem Pós-ordem Pre-ordem +*+36-415 percurso Percurso-Exercícios de Pré-ordem In-ordem Pós-ordem 3+6*4-1+5 36+41-*5+ int arv_pertence (Arv* a, char c) if (arv_vazia(a)) return 0; /* árvore vazia: não encontrou */ else return a->info==c arv_pertence(a->esq,c) arv_pertence(a->dir,c); void arv_imprime (Arv* a) if (!arv_vazia(a)) printf("%c ", a->info); /* mostra raiz */ arv_imprime(a->esq); /* mostra sae */ arv_imprime(a->dir); /* mostra sad */

Pré-Ordem Implementaçãorecursiva void arv_preordem (Arv* a) if (!arv_vazia(a)) processa(a); // por exemplo imprime Pós-Ordem Implementaçãorecursiva arv_preordem(a->esq); arv_preordem(a->dir); void arv_posordem (Arv* a) if (!arv_vazia(a)) arv_posordem (a->esq); arv_posordem (a->dir); processa (a); // por exemplo imprime In-Ordem Implementaçãorecursiva void arv_inordem (Arv* a) if (!arv_vazia(a)) arv_inordem (a->esq); Pergunta processa (a); // por exemplo imprime arv_inordem (a->dir); funçãoarv_pertence Pré-ordem, pós-ordem ou in-ordem? int arv_pertence (Arv* a, char c) if (arv_vazia(a)) return 0; /* árvore vazia: não encontrou */ else return a->info==c arv_pertence(a->esq,c) arv_pertence(a->dir,c);

Pergunta funçãoarv_libera Pré-ordem, pós-ordem ou in-ordem? ÁrvoresBinárias-conceitos Nível a o raizestáno últimoníveldaárvoreéa de um nó bnível0, seusfilhosdiretosno alturadaárvore nível nível1, 201... daecf Arv* arv_libera (Arv* a) if (!arv_vazia(a)) arv_libera(a->esq); /* libera sae */ arv_libera(a->dir); /* libera sad */ free(a); /* libera raiz */ return NULL; ÁrvoresBinárias-Altura Propriedade Alturade Esforçocomputacionalnecessárioparaalcançarqualquer Existe apenas das árvores Exemplo: nódaárvoreéproporcionalàalturadaárvore comprimentodo a folhas alturade umaárvore umaárvorecom umaárvorevaziaé-1 caminhomaislongodaraizatéumadas úniconóraizézero para nó h = 2 bdaec ÁrvoresBinárias-conceitos Árvore Cheia f todososseusnósinternostêmduassub-árvores númeron associadas = 2h+1-1de nósde umaárvorecheiade alturah

Exercícios Escrevero Utilizarpilha(definindoum topo) alocaçãodinâmicamassemutilizarprocedimentosrecursivos. parasaber algoritmode o endereçodasubárvorequerestaàdireita. visitaempré-ordemutilizando vetorquepodeser acessadopelo Escreverumafunçãorecursivaquecalculea processarraiza bináriadada. guardara seusnós. passaàb idem retornab C D depois queéa parad (topodapilha) subárvoreesquerda e napilhaparapoderacessar A processaessasubárvore alturade umaárvoreéigualaomáximonívelde paraacessaralturade Respostas int arv_altura (Arv* a) int alt_esq, alt_dir; if (arv_vazia(a)) return 0; alt_esq = arv_altura(a->esq); alt_dir = arv_altura(a->dir); return ((alt_esq>alt_dir)? alt_esq : alt_dir)+1; Respostas void arv_preordem (Arv* a) Arv* A[MAX]; //qual seria o valor de max? Arv* p; Arv* raiz; int topo; int acabou; topo = 0; p = a; acabou = arv_vazia(a); //inicializações while (!acabou) // enquanto houver nós para processar Para Fazerfunçãopararetornaro while (!arv_vazia(p)) árvore processa (p->info); Dado topo++; A[topo] = p; p = p->esq; Casopositivoretornao Pode algoritmode casa ser um recursivo item, travessia) procurase ou não conteúdodo item paide existenaárvore(usandoalgum um paido dado nónóde uma if (topo!= 0) p = A[topo]->dir; topo--; else acabou = 1;