Árvores. ! utilizada em muitas aplicações. ! modela uma hierarquia entre elementos. ! O conceito de árvores está diretamente ligado à recursão



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

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

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

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

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

Árvores & Árvores Binárias

Árvores & Árvores Binárias

Conceitos gerais Terminologia Forma de Representação de Árvores Árvores Binárias

AED1 - Árvores. Hebert Coelho. Instituto de Informática Universidade Federal de Goiás. HC AED1-Árvores 1/49

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

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

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

Aula 08. Estruturas de dados Árvore e Grafo

ÁRVORE BINÁRIA DE BUSCA

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

Estruturas de Dados II

Árvores. Algoritmos e Estruturas de Dados I. José Augusto Baranauskas Departamento de Física e Matemática FFCLRP-USP

Árvores & Árvores Binárias

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

Universidade Federal de Mato Grosso Estrutura de Dados II

Prof. Jesus José de Oliveira Neto

Listas Lineares. continuando...

Árvores. Sérgio Carlos Portari Júnior

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

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

AED2 - Aula 04 Vetores ordenados e árvores de busca

CES-11. Árvores. Conceito de árvore. Definição recursiva de árvore Definições associadas a árvore. Ordenação dos nós de uma árvore

Árvores. Árvores Binárias. Conceitos gerais Terminologia Forma de Representação de Árvores. Conceitos gerais Operações

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

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

Pesquisa em memória primária

DAINF - Departamento de Informática

Árvores Conceitos gerais

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

Árvores. Listas e árvores. Árvores. Árvores. Árvores. Árvores 03/11/2011. Listas lineares

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

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

Árvores. SCC-214 Projeto de Algoritmos. Thiago A. S. Pardo. Um nó após o outro, adjacentes Sem relações hierárquicas entre os nós, em geral

ÁRVORES. Prof. Yan ndre Maldonado - 1. Prof. Yandre Maldonado e Gomes da Costa

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

Copiar para o ficheiro ArvoreBinaria.h e adaptar as funções associadas às operações sobre árvores binárias (3.1 a 3.12)

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

Árvores Binárias. 9/11 e 11/11 Conceitos Representação e Implementação

CES-11. Algoritmos e Estruturas de Dados

LISTAS ENCADEADAS OU NÃO- SEQÜENCIAIS. Estrutura de Dados

Árvore binária - definição

CONCEITO DE ÁRVORE CES-11. A raiz é o único nó que não possui ancestrais. As folhas são os nós sem filhos. Exemplos:

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

Árvores binárias de busca

(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.

Estrutura de Dados Árvores Prof. Tiago Eugenio de Melo, MSc material de referência

Revisão: Tipo Abstrato de Dados Recursividade

Árvores. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

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

ÁRVORE BINÁRIA DE BUSCA TDA-ABB

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

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

Pesquisa em Árvores Digitais. Adaptado de David M.

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

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

Edital de Seleção 053/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Aula T13 BCC202 Árvores. Túlio Toffolo

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

ESTRUTURA DE DADOS. Arvore Binária Jose. Arvore Ternaria Direção

Estruturas de Dados. Profº Carlos Alberto Teixeira Batista

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

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

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

Árvores Binárias de Busca

Estrutura de Dados e Algoritmos e Programação e Computadores II. Aula 4: Listas Estáticas e Dinâmicas

DATA STRUCTURES, AN ADVANCED APPROACH USING C

Pilhas e Filas Encadeadas. Algoritmos e Estruturas de Dados I

Aula 14 Listas Duplamente Encadeadas. prof Leticia Winkler

Árvores. Prof. Byron Leite Prof. Tiago Massoni Prof. Fernando Buarque. Engenharia da Computação. Poli - UPE

Árvores Binárias de Busca

Listas - Outras. Listas Circulares Nós Cabeça Listas Duplamente Ligadas/Encadeadas Aplicações

J. L. Rangel 1. provar que uma árvore binária de altura h tem, no mínimo, h+1 nós, e, no máximo, 2 h+1 1.

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

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

ÁRVORES. Árvores. Árvores. Prof. Yandre Maldonado e Gomes da Costa

Estruturas de Dados Grafos

Árvores - Conceitos. Roseli Ap. Francelin Romero

Lista: conceito, representação e algoritmos

Árvores Binárias de Busca

INF 1620 P3-25/11/05 Questão 1 Nome:

(a) Indique, em português, o que realiza a seguinte função. [4 pontos]

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

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

INE5408 Estruturas de Dados

Introdução a AVL: teoria e prática. 22/11, 25/11 e 30/11

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Aula 08: Árvores

Pesquisa em Memória Primária Árvores de Busca. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

CES-11. Algoritmos e Estruturas de Dados. Árvores Operações sobre uma árvore Estruturas para armazenar árvores

INF 1010 Estruturas de Dados Avançadas

Universidade Federal de Mato Grosso

Listas Estáticas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

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

INF1010 Lista de Exercícios 2

Transcrição:

Árvores 1

Árvores! utilizada em muitas aplicações! modela uma hierarquia entre elementos! árvore genealógica! diagrama hierárquico de uma organização! modelagem de algoritmos! O conceito de árvores está diretamente ligado à recursão 2

Árvores! um conjunto finito de elementos onde! um elemento é chamado de raiz! os outros são divididos em subconjuntos disjuntos, onde cada um define uma árvore! cada elemento é um nó ou vértice da árvore! arcos ou arestas conectam os vértices 3

Árvores! uma coleção não vazia de vértices e ramos que satisfazem a certos requisitos! vértice (ou nó):! é um objeto simples que pode ter um nome e mais alguma outra informação associada! arco ou aresta (direcionado ou não):! é uma conexão entre dois nós 4

Representação A B C D E F G H I 5

Terminologia e Propriedades! cada vértice (exceto a raiz) tem exatamente um antecessor imediato ou pai! cada vértice tem nós sucessores imediatos ou filhos, a não ser:! nós sem filhos " terminais ou folhas! filhos de um mesmo pai - irmãos! nós com pelo menos um filho " não-terminais ou internos 6

Terminologia e Propriedades! caminho em uma árvore:! é uma lista de vértices distintos e sucessivos, conectados por arcos (arestas) da árvore! nó raiz! existe exatamente um caminho entre a raiz e cada um dos nós da árvore! se existir mais de um caminho ou nenhum "grafo 7

Terminologia e Propriedades A B C D E F G H I! grau! é o número de subárvores não vazias de um nó! no exemplo, o grau de:! A é 3! C é 2 8

Terminologia e Propriedades! qualquer nó é a raiz de uma sub-árvore consistindo dele e dos nós abaixo 9

Árvores A A B C D D C B E F G H I I H G F E! qual a diferença entre as duas árvores? 10

Árvores! A única diferença entre as duas árvores é a ordem das sub-árvores! Uma árvore ordenada é definida como uma árvore onde as sub-árvore formam um conjunto ordenado! Em uma árvore ordenada define-se o primeiro, segundo e último irmão, de acordo com alguma propriedade 11

Terminologia! os vértices da árvore estão classificados em níveis! é o número de nós no caminho entre o vértice e a raiz A B C D E F G H I J nível da raiz é zero nível de C é 1 nível de K é 3 nível de um nó = nível de seu pai + 1 K 12

Terminologia! Altura de uma árvore! corresponde ao maior nível! maior distância entre a raiz e qualquer nó! Floresta! um conjunto de árvores! se removemos a raiz e os arcos que a ligam às subárvores, ficamos com uma floresta 13

Árvore Binária! é um conjunto finito de elementos que é ou vazio ou composto de três conjuntos disjuntos! o primeiro contém um único elemento, a raiz! os outros dois subconjuntos são árvores binárias! as sub-árvores da esquerda e da direita! As sub-árvores da esquerda ou da direita podem estar vazias 14

Árvore Binária A B C D E F G H I 15

Árvores Binárias! considerando que os dois filhos de cada nó interno são ordenados:! o filho da esquerda e! o filho da direita! Cada nó interno tem que ter filho da direita ou da esquerda, sendo que um ou ambos podem ser nós externos 16

Árvores Binárias! uma árvore binária vazia:! consiste de nenhum nó interno e um nó externo! uma árvore binária é uma árvore ordenada, na qual cada nó tem 0, 1, ou 2 filhos! cada filho corresponde a uma árvore binária 17

Árvores Binárias O número de sub-árvores vazias a esquerda ou a direita em uma árvore binária com n nós é: n+1 18

Árvores Binárias Demonstração: explorando a definição recursiva de árvores! se n = 1 então 2 subárvores vazias a 19

Árvores Binárias Demonstração: explorando a definição recursiva de árvores! se n = 1 então 2 subárvores vazias! se n = 2 então 3 subárvores vazias a b 20

Árvores Binárias! Se vale para n 1 vértices (ela tem n subárvores vazias)! em uma árvore com n nós! uma subárvore vazia foi substituído por um vértice interno e 2 subárvores vazias a a b b! o número de subárvores vazias é então: n -1 +2 = n +1 c 21

Árvores Binárias! Definição de Árvores uma árvore é um único nó ou um nó raiz conectado a um conjunto de árvores! Definição de Árvores Binárias uma árvore binária é um nó externo ou um nó raiz (interno) conectado a esquerda e a direita a árvores binárias 22

Árvore Binária Estrita! todo nó não folha possui filhos a esquerda e a direita " Árvore Binária Estrita Toda árvore binária estrita com n folhas contém 2n-1 nós 23

Árvore Binária Estrita! árvore binária estrita com:! 1 folha " um nó! 2 folhas " 3 nós! hipótese: n folhas " 2n-1 nós! + 1 folha (n+1 folhas então)! acrescentar dois filhos de uma folha da árvore! dois novos nós são folhas! antigo nós folha passa a ser interno! Total de nós: 2n-1 +2 = 2n+1 = 2(n+1)-1 24

Árvore Binária! Nível:! A raiz tem nível 0! A raiz de outro nó é o nível do nó pai +1.! A profundidade de uma árvore é o maior nível para todas as folhas! Markeson: raiz tem nível 1! Langsan : raiz tem nível 0 25

Árvore Binária! árvore binária cheia de nível d: árvore binária estrita com todas as folhas no nível d! árvore binária completa de nível d: uma árvore binária estrita com todas as folhas no nível d ou no nível d-1 26

Árvore Binária Completa A B C D E F G H I 27

Árvore Binária Cheia A B C D E F G H I J K L M N O 28

Árvore Binária! Para muitas aplicações, é importante a relação entre altura e número de nós 29

Representando Árvores Binárias! typedef struct { int info; tipo_no * esq; tipo_no * dir; } tipo_no; B A C 30

Representando Árvores Binárias # Typedef struct { char info; tipo_no * esq; tipo_no * dir; tipo_no * pai; } tipo_no B A C 31

Representando Árvores Binárias # Na representação nós externos podem ser # NULL # ponteiro para o próprio nó A C B

Representando Árvores Binárias a*b+d - e *(f+g) - * * a b + e f g 33

Representando Florestas! árvores binárias possuem dois ponteiros em cada nó interno, um para cada filho, e portanto sua representação é imediata! o que fazer para árvores gerais ou florestas, com um número arbitrário de filhos por nó, que requerem um número arbitrário de ponteiros Representação depende da Aplicação 34

Representando Florestas! se não é necessário caminhar para os níveis de baixo da árvore mas só para os de cima! percorre-se a ávores dos nós terminais para os não terminais e por último a raiz A B C B C A

Representando Florestas typedef struct { char info; tipo_no * filho; tipo_no * irmão; } tipo_no B A C D E 36

Representando Florestas! se é necessário caminhar para os níveis mais altos! empregar uma lista encadeada conectando o nó com seus irmãos e outra com seus filhos! ao invés de empregar um nó dummy para terminar cada lista pode-se apontar de volta para seu pai permitindo mover para cima ou para baixo! esses ponteiros para pai tem que estar marcados para poder ser distingui-los dos ponteiros para irmãos! alternativamente pode-se armazenar o nome do pai de forma que a busca pára quando o nó for revisitado 37

Representando Florestas! Essa representação cada nó possui exatamente dois ponteiros! 1 para filho e! 1 para um irmão! Onde está a diferença entre essa estrutura e uma árvore binária??! não existe 38

Operações em Árvores Binárias

Operações em Árvores Binárias

Aplicações Com Árvores Binárias! É uma estrutura útil quando uma de duas decisões devem ser tomadas no decorrer do processo.! Encontrar todas as duplicatas em uma lista de números! Uma forma de fazer isso é comparar o número como todos os que o precedem! isto não é uma solução eficiente

Aplicações Com Árvores Binárias! Solução: empregar uma árvore binária! Armazenam-se os números na árvore de forma a:! o 1º número é armazenado na raiz de uma árvore com apenas um nó interno! cada um dos próximos números na lista é comparado com a raiz:! caso seja igual é uma duplicata! caso seja menor, é armazenado na sub-árvore da direita seguindo-se recursivamente o mesmo procedimento! caso seja maior, é armazenado na sub-árvore da esquerda seguindo-se recursivamente o mesmo procedimento

Aplicações Com Árvores Binárias 14, 18, 4, 9, 7, 15, 3, 5, 17, 4, 20, 9, 5 14 4 18 3 9 15 20 7 17 5

Aplicações com Árvores Binárias! outra aplicação comum é atravessar a árvore binária, visitando cada nó! como sistematicamente visitaremos cada nó?! operação é trivial para listas lineares! para árvores, existem diferentes formas de proceder! os métodos diferem conforme a ordem em que se visitam os nós, o problema sendo resolvido

Atravessando Árvores Binárias! Métodos! pré-ordem:visite a raiz, então visite a subárvore da esquerda, depois a subárvore da direita! em-ordem ou ordem simétrica: visite a subárvore da esquerda, então visite a raiz, depois a subárvore da direita! pós-ordem: visite a subárvore da esquerda, então visite a subárvore da direita, depois a raiz

Atravessando Árvores Binárias a*b+d - (f+g) * e - * * pré-ordem: - * a b * + f g e em-ordem: a*b - f+g * e a b + e pós-ordem: a b * f g + e * - f g

Atravessando Árvores Binárias! implementação simples dos métodos - recursiva! como se visita uma subárvore de cada vez, seguindo-se a regra recursiva, cada subárvore é visitada começando pela raiz

Pré-ordem ( pt ) pre_ordem { if (pt == NULL) return (); visite(pt); pre_ordem (pt->esq); pre_ordem (pt-> dir); }

em-ordem ( pt ) em_ordem { if (pt == NULL) return (); em_ordem (pt->esq); visite(pt); em_ordem (pt-> dir); }

Pós-ordem ( pt ) pos_ordem { if (pt == NULL) return (); pos_ordem (pt->esq); pos_ordem (pt-> dir); visite(pt); }

Exercícios 1) Calcular a altura de cada nó de uma árvore binária (exercício do livro texto) 2) Implementar os procedimentos em-ordem de forma não recursiva

em-ordem p = raiz; A do { /* segue pelo ramo da esq. até NULL */ B C while (p!= NULL) { push(p); D E } p=p->esq; H I /* verifica se já processou toda árvore */ if (pilha_não_vazia()){ p = pop(); visite(p); p = p->dir; } } while(pilha_não_vazia() p!= NULL); }