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

Documentos relacionados
Listas Encadeadas. Fabrício J. Barth. BandTec - Faculdade de Tecnologia Bandeirantes

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

Árvore binária - definição

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

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

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

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

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

ÁRVORES ABB (ÁRVORES BINÁRIAS DE BUSCAS) Sérgio Carlos Portari Júnior

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

INF 1007 Programação II

Aula 08. Estruturas de dados Árvore e Grafo

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

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

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

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

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

SUMÁRIO. Fundamentos Árvores Binárias Árvores Binárias de Busca

INF1007 Programação 2 9 Pilhas. (c) Dept. Informática - PUC-Rio 1

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

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

INF 1007 Programação II

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

Prof. Jesus José de Oliveira Neto

Métodos Computacionais. Árvores

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

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

Árvores Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação

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

Árvore Binária Exemplo de Implementação

Instituto de C. Linguagem C: Listas. Luis Martí Instituto de Computação Universidade Federal Fluminense -

Árvores binárias de busca

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

INF1007: Programação 2 6 Ordenação de Vetores. 01/10/2015 (c) Dept. Informática - PUC-Rio 1

ÁRVORE BINÁRIA DE BUSCA

UFJF - DCC - Estrutura de Dados e Laboratório de Programação II

Algoritmos e Estrutura de Dados II. Árvore AVL. Prof Márcio Bueno. / Material da Prof a Ana Eliza

Árvores. Estruturas de Dados. Prof. Vilson Heck Junior

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

INF1007: Programação Funções Recursivas. 12/03/2014 (c) Dept. Informática - PUC-Rio 1

RESULUÇÃO DOS EXERCÍCIOS E INSTRUÇÕES DE DECISÃO (if{} e else{}) Profº André Aparecido da Silva Disponível em:

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

Algoritmos e Estrutura de Dados II. Árvore AVL. Prof a Karina Oliveira. Fonte: Prof a Ana Eliza

Prova 2 PMR2300 1o. semestre 2015 Prof. Thiago Martins

Árvores. Sérgio Carlos Portari Júnior

Estrutura de Dados. Carlos Eduardo Batista. Centro de Informática - UFPB

Árvores Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação

Árvores & Árvores Binárias

INF1007: Programação 2 8 Listas Encadeadas. (c) Dept. Informática - PUC-Rio 1

Árvores. A Profundidade da Árvore B C D E. Árvores Implementação Genérica

Linguagem C: Árvores Binarias

Algoritmos e Estrutura de Dados II. Árvore. Prof a Karina Oliveira.

Programação de Computadores II. Cap. 17 Busca

Princípios de Desenvolvimento de Algoritmos MAC122 Prof. Dr. Paulo Miranda IME-USP

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

INF 1620 P2-23/10/04 Questão 1 Nome:

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Introdução a árvores AVL. Prof. Ernesto Lindstaedt

Prof. Jesus José de Oliveira Neto

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

Universidade de Mogi das Cruzes Implementação Orientada a Objetos - Profª. Danielle Martin. Guia da Sintaxe do Java

Estruturas de Dados Aula 12: Outras Implementações de Listas 18/04/2011

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

Linguagem de Programação II Implementação

ESTRUTURA DE DADOS E ALGORITMOS. Árvores Binárias de Busca. Cristina Boeres

Lista Ordenada. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35

Prof. Jesus José de Oliveira Neto

Fontes Bibliográficas. Listas Circulares. Função Imprime

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

ESTRUTURA DE DADOS. Árvores, árvores binárias e percursos. Cristina Boeres

Árvores. N-árias, Binárias, Busca. Vanessa Maia Berny Mestrado em Ciência da Computação

INF 1620 P4-06/12/02 Questão 1 Nome:

Instituto de C. Filas. Luis Martí Instituto de Computação Universidade Federal Fluminense -

Árvores, Árvores Binárias e Árvores Binárias de Pesquisa. Rui Jorge Tramontin Jr.

Recursividade. Métodos iterativos. Prof. Cesar Augusto Tacla. Métodos iterativos utilizam estruturas de repetição

Prova de Recuperação PMR3201/PMR2300 1o. semestre 2015 Prof. Thiago Martins

Fundamentos Básicos da linguagem Java (Programação Orientada a Objetos) Prof. Responsáveis Wagner Santos C. de Jesus

INF 1007 Programação II

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

Árvores. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira

INF 1620 P4-27/06/02 Questão 1 Nome:

DAINF - Departamento de Informática

Programação de Computadores II. Cap. 4 Funções

ESTRUTURAS DE DADOS E ALGORITMOS ÁRVORE BINÁRIA

Árvores Binárias de Busca

Prova 2 PMR3201 1o. semestre 2016 Prof. Thiago Martins

Implementando classes em C# Curso Técnico Integrado em Informática Fundamentos de Programação

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

(a) todos os nós irmãos da árvore m-ária são interligados; (b) todas as conexões pai-filho são removidas, exceto a primeira de cada grupo.

GGI026 - Árvore rubro-negra

Estruturas de Dados II

ADT - Árvores. ADT Árvores Definição

INF 1620 P4-13/12/01 Questão 1 Nome:

Sintaxe da linguagem Java

Orientação a Objetos e Java

Palavras Reservadas da Linguagem Java

UNIVERSIDADE DE SÃO PAULO ICMC SCC 202 Algoritmos e Estrutura de Dados I - 2º Semestre 2010 Profa. Sandra Maria Aluísio;

Transcrição:

Árvores Fabrício J. Barth BandTec - Faculdade de Tecnologia Bandeirantes Setembro de 2011

Tópicos Introdução Árvores binárias Implementação em Java Ordens de percurso em árvores binárias Altura de uma árvore Árvores com número váriavel de filhos Implementação em Java Altura de uma árvore Topologia Árvores Tópicos Faculdade de Tecnologia Bandeirantes 2

Introdução - Árvore Um conjunto de nós tal que: existe um nó r, denominado raiz, com zero ou mais sub-árvores, cujas raízes estão ligadas a r. Árvores Introdução - Árvore Faculdade de Tecnologia Bandeirantes 3

os nós raízes destas sub-árvores são os filhos de r. os nós internos da árvore são os nós com filhos. as folhas ou nós externos da árvore são os nós sem filhos. Árvores Introdução - Árvore Faculdade de Tecnologia Bandeirantes 4

Árvores Binárias uma árvore em que cada nodo tem zero, um ou dois filhos. uma árvore binária é: uma árvore vazia, ou; um nodo raiz com duas sub-árvores: a sub-árvore da direita (sad); a sub-árvore da esquerda (sae). Árvores Árvores Binárias Faculdade de Tecnologia Bandeirantes 5

Árvores Árvores Binárias Faculdade de Tecnologia Bandeirantes 6

Árvores Binárias - Exemplo Árvore binária representando expressões aritméticas: nós folhas representam operandos nós internos operadores exemplo: (3 + 6) (4 1) + 5 Árvores Árvores Binárias - Exemplo Faculdade de Tecnologia Bandeirantes 7

+ 5 + 3 6 4 1 Árvores Árvores Binárias - Exemplo Faculdade de Tecnologia Bandeirantes 8

Árvores binárias - implementação A representação de uma árvore é feita através de uma referência para o nodo raiz da árvore. Representação de um nodo da árvore: 1 public class Nodo { 2 private char c; 3 private Nodo esq; 4 private Nodo dir; 5 } Árvores Árvores binárias - implementação Faculdade de Tecnologia Bandeirantes 9

Interface do tipo Árvore Nodo criasemfilhos(char c) Nodo criacomfilhos(char c, Nodo esq, Nodo dir) boolean vazia(nodo n) boolean pertence(char c, Nodo n) void imprime(nodo n) Árvores Interface do tipo Árvore Faculdade de Tecnologia Bandeirantes 10

Árvores Binárias - implementação 1 public static Nodo criasemfilhos(char c) { 2 return new Nodo(c,null,null); 3 } Árvores Árvores Binárias - implementação Faculdade de Tecnologia Bandeirantes 11

Árvores Binárias - implementação 1 public static Nodo criacomfilhos(char c, 2 Nodo esq, 3 Nodo dir) { 4 return new Nodo(c,esq,dir); 5 } Árvores Árvores Binárias - implementação Faculdade de Tecnologia Bandeirantes 12

Árvores Binárias - implementação 1 public static boolean vazia(nodo n) { 2 return n == null; 3 } Árvores Árvores Binárias - implementação Faculdade de Tecnologia Bandeirantes 13

Árvores Binárias - implementação 1 public static boolean pertence(char c, Nodo n) { 2 if(vazia(n)) 3 return false; 4 else 5 return c == n.getc() 6 pertence(c,n.getesq()) 7 pertence(c,n.getdir()); 8 } Árvores Árvores Binárias - implementação Faculdade de Tecnologia Bandeirantes 14

Árvores Binárias - implementação 1 public static void imprime(nodo n) { 2 if(!vazia(n)){ 3 System.out.print(n.getC()+" - "); 4 imprime(n.getesq()); 5 imprime(n.getdir()); 6 } 7 } Árvores Árvores Binárias - implementação Faculdade de Tecnologia Bandeirantes 15

Árvores Binárias - exemplo de uso 1 public Main(){ 2 Nodo raiz = ArvoreBinaria.criaComFilhos( a, 3 ArvoreBinaria.criaSemFilhos( d ), 4 ArvoreBinaria.criaSemFilhos( e )); 5 6 if(arvorebinaria.pertence( f, raiz)) 7 System.out.println("encontrou"); 8 else 9 System.out.println("nao encontrou"); 10 11 ArvoreBinaria.imprime(raiz); 12 } Árvores Árvores Binárias - exemplo de uso Faculdade de Tecnologia Bandeirantes 16

Ordens de percurso em árvores binárias Árvores Ordens de percurso em árvores binárias Faculdade de Tecnologia Bandeirantes 17

1 public static void imprimepreordem(nodo n) { 2 if(!vazia(n)){ 3 System.out.print(n.getC()+" - "); 4 imprimepreordem(n.getesq()); 5 imprimepreordem(n.getdir()); 6 } 7 } 8 9 public static void imprimeinordem(nodo n) { 10 if(!vazia(n)){ 11 imprimeinordem(n.getesq()); 12 System.out.print(n.getC()+" - "); 13 imprimeinordem(n.getdir()); 14 } 15 } 16 17 public static void imprimeposordem(nodo n) { 18 if(!vazia(n)){ 19 imprimeposordem(n.getesq()); 20 imprimeposordem(n.getdir()); 21 System.out.print(n.getC()+" - "); 22 } 23 } Árvores Ordens de percurso em árvores binárias Faculdade de Tecnologia Bandeirantes 18

Exemplos concretos do uso de árvores Estrutura de diretórios e arquivos de um sistema operacional Análise semântica de equações matemáticas É uma estrutura usada por vários outros algoritmos... Árvores Exemplos concretos do uso de árvores Faculdade de Tecnologia Bandeirantes 19

Altura de árvore binárias Propriedade fundamental de árvores: só existe um caminho da raiz para qualquer nó. Altura de uma árvore: comprimento do caminho mais longo da raiz até uma das folhas. a altura de uma árvore com um único nó raiz é zero a altura de uma árvore vazia é -1 Árvores Altura de árvore binárias Faculdade de Tecnologia Bandeirantes 20

Altura de árvore binárias Nível de um nó: a raiz está no nível 0, seus filhos diretos estão no nível 1,... o último nível da árvore é a altura da árvore. Árvores Altura de árvore binárias Faculdade de Tecnologia Bandeirantes 21

Altura de árvore binárias Árvore cheia: todos os seus nós internos tem duas sub-árvores associadas. número n de nós de uma árvore cheia de altura h é igual a n = s k+1 1 (1) Árvores Altura de árvore binárias Faculdade de Tecnologia Bandeirantes 22

Altura de árvore binárias Árvore degenerada: todos os seus nós internos tem uma única sub-árvore associada. número n de nós de uma árvore cheia de altura h é igual a n = h + 1 (2) Árvores Altura de árvore binárias Faculdade de Tecnologia Bandeirantes 23

Árvores com número variável de filhos Cada nó pode ter mais que duas sub-árvores associadas. c : / arquivos/ temp.txt program/ usuarios/ aqr1.exe arq2.exe arq3.exe Árvores Árvores com número variável de filhos Faculdade de Tecnologia Bandeirantes 24

Árvores com até 3 nós 1 public class NodoTernario { 2 private String conteudo; 3 private NodoTernario[] filhos = 4 new NodoTernario[3]; 5 } Árvores Árvores com até 3 nós Faculdade de Tecnologia Bandeirantes 25

Procurando por um elemento 1 public static boolean pertence(string c, NodoTernario n) 2 if(vazia(n)) return false; else{ 3 if (c.equals(n.getconteudo())){ 4 return true; 5 }else{ 6 NodoTernario [] f = n.getfilhos(); 7 for(int i=0; i<f.length; i++){ 8 if(pertence(c,f[i])){return true;} 9 } 10 return false; 11 }}} Árvores Procurando por um elemento Faculdade de Tecnologia Bandeirantes 26

Árvores com até N nós fixos 1 public class NodoTernario { 2 private String conteudo; 3 private NodoTernario[] filhos = 4 new NodoTernario[N]; 5 } Árvores Árvores com até N nós fixos Faculdade de Tecnologia Bandeirantes 27

Representação de árvore com número variável de filhos Árvores Representação de árvore com número variável de filhos Faculdade de Tecnologia Bandeirantes 28

Funções de uma árvore n-ária Nodo create(char c) void insert(nodo a, Nodo sub a) void print(nodo a) boolean search(nodo n, char c) int getaltura(nodo n) Árvores Funções de uma árvore n-ária Faculdade de Tecnologia Bandeirantes 29

Nodo de uma árvore n-ária 1 public class Nodo { 2 3 private char c; 4 private Nodo prim; 5 private Nodo prox; 6 7 } Árvores Nodo de uma árvore n-ária Faculdade de Tecnologia Bandeirantes 30

Criação de nodos em uma árvore n-ária 1 public Nodo create(char c){ 2 Nodo n = new Nodo(); 3 n.setc(c); 4 n.setprim(null); 5 n.setprox(null); 6 return n; 7 } Árvores Criação de nodos em uma árvore n-ária Faculdade de Tecnologia Bandeirantes 31

Inserção em uma árvore n-ária 1 /* 2 * inseri uma nova sub-arvore como filha 3 * de um dado no 4 */ 5 public void insert(nodo a, Nodo sub_a){ 6 //inserindo no inicio. 7 sub_a.setprox(a.getprim()); 8 a.setprim(sub_a); 9 } Árvores Inserção em uma árvore n-ária Faculdade de Tecnologia Bandeirantes 32

Impressão de uma árvore n-ária 1 public void print(nodo a){ 2 System.out.println(a.getC()); 3 for(nodo p = a.getprim(); p!=null; p=p.getprox()){ 4 print(p); //imprime cada sub-arvore filha 5 } 6 } Árvores Impressão de uma árvore n-ária Faculdade de Tecnologia Bandeirantes 33

Busca em uma árvore n-ária 1 public boolean search(nodo n, char c){ 2 if(n.getc()==c){ 3 return true; 4 }else{ 5 for(nodo p=n.getprim(); p!=null; p=p.getprox()){ 6 if(search(p,c)) 7 return true; 8 } 9 } 10 return false; 11 } Árvores Busca em uma árvore n-ária Faculdade de Tecnologia Bandeirantes 34

Atributos de uma árvore n-ária 1 public int getaltura(nodo n){ 2 int hmax = -1; /*caso de arvore sem filhos*/ 3 for(nodo p=n.getprim(); p!=null; p=p.getprox()){ 4 int h = getaltura(p); 5 if(h > hmax) 6 hmax = h; 7 } 8 return hmax + 1; 9 } Árvores Atributos de uma árvore n-ária Faculdade de Tecnologia Bandeirantes 35

Exemplo de construção e utilização de uma árvore n-ária 1 public Main(){ 2 //cria nodos como folha 3 ArvoreNAria arv = new ArvoreNAria(); 4 Nodo a = arv.create( a ); 5 Nodo b = arv.create( b ); 6 Nodo c = arv.create( c ); 7 Nodo d = arv.create( d ); 8 Nodo e = arv.create( e ); 9 Nodo f = arv.create( f ); Árvores Exemplo de construção e utilização de uma árvore n-ária Faculdade de Tecnologia Bandeirantes 36

1 //monta a hierarquia 2 arv.insert(a, b); 3 arv.insert(a, c); 4 arv.insert(c, d); 5 arv.insert(a, e); 6 arv.insert(d, f); 7 8 arv.print(a); 9 System.out.println(arv.search(a, d )); 10 System.out.println(arv.search(e, d )); 11 System.out.println(arv.getAltura(a)); 12 } Árvores Exemplo de construção e utilização de uma árvore n-ária Faculdade de Tecnologia Bandeirantes 37

Topologia Binária Representação de um nodo de uma árvore n-ária representação de um nodo de uma árvore binária. Um nodo possui a informação que deve ser armazenada e duas referências para sub-árvores: árvore binária: referências para as sub-árvores à esquerda e à direita. árvore n-ária: referências para a primeira sub-árvore filha e para a sub-árvore irmã. Árvores Topologia Binária Faculdade de Tecnologia Bandeirantes 38

Resumo Árvore binária. Árvore com número variável de filhos (n-ária). Árvores Resumo Faculdade de Tecnologia Bandeirantes 39

Material de consulta e referência Capítulo 13 do livro: Introdução a Estruturas de Dados do Waldemar Celes, Renato Cerqueira e José Lucas Rangel. Imagens retiradas do site da disciplina de Programação II da PUC do Rio de Janeiro http://www.inf.puc-rio.br/ inf1007/. Árvores Material de consulta e referência Faculdade de Tecnologia Bandeirantes 40