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

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

Árvores. Aula 04. DPEE 1038 Estrutura de Dados para Automação Curso de Engenharia de Controle e Automação Universidade Federal de Santa Maria

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

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

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

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

Árvores & Árvores Binárias

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

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

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 Binárias. 9/11 e 11/11 Conceitos Representação e Implementação

DAINF - Departamento de Informática

Prof. Jesus José de Oliveira Neto

Estruturas de Dados II

CES-11. Algoritmos e Estruturas de Dados

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

Árvores & Árvores Binárias

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

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

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

Aula 08. Estruturas de dados Árvore e Grafo

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

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

DATA STRUCTURES, AN ADVANCED APPROACH USING C

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

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

Árvores & Árvores Binárias

Pesquisa em memória primária

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

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

ÁRVORE BINÁRIA DE BUSCA

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

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

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

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

Aula T13 BCC202 Árvores. Túlio Toffolo

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

ALGORITMOS AVANÇADOS. UNIDADE V Estruturas de dados dos tipos Árvore Binária e Árvore AVL. Luiz Leão

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

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

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

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

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

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

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

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

Árvores Binárias. Disciplina de Algoritmos e Estrutura de Dados III. Prof. Marcos Antonio Schreiner 17/03/2015

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

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

Estruturas de Dados. Profº Carlos Alberto Teixeira Batista

Universidade Federal de Mato Grosso Estrutura de Dados II

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:

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

Listas Lineares Ordenadas

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

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

Á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

Pesquisa em Árvores Digitais. Adaptado de David M.

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

ÁRVORE B. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

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

Árvore binária - definição

Universidade Federal de Mato Grosso

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

Árvores. Árvores M-Vias. Métodos de Pesquisa de Dados. de Pesquisa (ANP) VANTAGENS EXEMPLO

AED2 - Aula 04 Vetores ordenados e árvores de busca

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

GGI026 - Árvore rubro-negra - Remoção

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

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

Introdução à Computação II (Noturno) BCC Unesp Rio Claro/SP 2015 em PDF via Moodle: Escolha apenas 5 exercícios para entrega Exercício 01 (Pilhas)

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

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

Listas Lineares. continuando...

8. Árvores. Fernando Silva DCC-FCUP. Estruturas de Dados. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38

8. Árvores. Fernando Silva. Estruturas de Dados DCC-FCUP. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

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

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

ÁRVORE BINÁRIA DE BUSCA TDA-ABB

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

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

Filas de Prioridade. Uma fila de prioridade pode ser vista como uma generalização das filas com as seguintes duas operações:

Algoritmos e Estruturas de Dados I

ÍNDICE. Árvores (Definição e terminologias) 2. Árvores Binárias 4. Armazenamento de Árvores Binárias 5. Aplicação 6. Como percorrê-la 6.

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

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

Matemática Discreta 10

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

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

Prof. Jesus José de Oliveira Neto

Árvores Binárias de Busca

Unidade: Estruturas de Dados Não Lineares. Unidade I:

Árvores. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo

ÁRVORES E ÁRVORES BINÁRIAS. Adaptado de Alexandre P

Aula 14 Listas Duplamente Encadeadas. prof Leticia Winkler

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

Busca. Pesquisa sequencial

Transcrição:

ADT - Árvores Outro tipo abstrato de dados (ADT) é a árvore. Como acontece com as listas, a utilização das árvores será basicamente como estruturas de dados ao invés de tipos de dados. Ou seja, o foco se dará basicamente na implementação, e não na definição matemática. 1 ADT Árvores Definição Árvore é uma estrutura de dados não-linear e bidimensional. Uma árvore consiste em nós conectados por arestas (linhas). Os nós são representados como círculos e as arestas como linhas, conectando os círculos. As arestas devem ser representadas em um programa por referências. Se todo nó poderá ter no máximo dois filhos, a árvore será chamada de árvore binária. 2 1

Árvore binária é definida por um conjunto finito de elementos que está vazio ou é particionado em três subconjuntos disjuntos. O primeiro subconjunto contém um único elemento, chamado raiz da árvore. Os outros dois subconjuntos são em si mesmo árvores binárias, chamadas subárvores esquerda e direita da árvore original. Uma subárvore esquerda ou direita pode estar vazia. Cada elemento de uma árvore binária é chamado nó da árvore. 3 Raiz Um método convencional de ilustrar uma árvore binária aparece na Figura 1. Essa árvore consiste em nove nós, com A como sua raiz. Figura 1 Árvore binária. Fonte: TENENBAUM et.al., 1999, p. 304. 4 2

Um método convencional de ilustrar uma árvore binária aparece na Figura 1. Essa árvore consiste em nove nós, com A como sua raiz. Sua subárvore esquerda está enraizada em B e sua subárvore direita, em C. Isso aparece indicado pelas duas ramificações que saem de A: para B, no lado esquerdo e para C, no lado direito. Subárvore esquerda direita Figura 1 Árvore binária. Fonte: TENENBAUM et.al., 1999, p. 304. 5 Um método convencional de ilustrar uma árvore binária aparece na Figura 1. Essa árvore consiste em nove nós, com A como sua raiz. Sua subárvore esquerda está enraizada em B e sua subárvore direita, em C. Isso aparece indicado pelas duas ramificações que saem de A: para B, no lado esquerdo e para C, no lado direito. Por exemplo, a subárvore esquerda, da árvore binária enraizada em C e a subárvore direita da árvore binária enraizada em E estão, ambas, vazias. As árvores binárias enraizadas em D, G, H e I têm subárvores direita e esquerda vazias. Vazias Figura 1 Árvore binária. Fonte: TENENBAUM et.al., 1999, p. 304. 6 3

A Figura 2 ilustra algumas estruturas que não são árvores binárias. Procure entender por que cada uma delas não é uma árvore binária conforme definição anterior. Figura 2 Estruturas que não são árvores binárias. Fonte: TENENBAUM et.al., 1999, p. 305. 7 Se A é a raiz de uma árvore binária e B é a raiz de sua subárvore di- reita ou esquerda, então diz-se que Aé o pai ide B e que B é o filho direito ou esquerdo de A. Embora as árvores naturais cresçam com suas raízes fincadas na terra e suas folhas no ar, os cientistas de computação retratam quase universalmente as estruturas de dados em árvore com a raiz no topo e as folhas no chão. O sentido da raiz para as folhas é "para baixo" e o sentido oposto é "para cima". Quando percorre-se uma árvore a partir das folhas na direção da raiz, diz-se que está "subindo" a árvore, e se partir da raiz para as folhas, está "descendo" a árvore. 8 4

Se todo nó que não é folha - nó que não possui filhos - numa árvore binária tiver subárvores esquerda e direita não-vazias, a árvore será considerada uma árvore estritamente binária. Sendo assim, a árvore da Figura 3 é estritamente binária, enquanto a da Figura 1 não é (porque os nós C e E têm um filho cada). Uma árvore estritamente binária com n folhas contém sempre 2*n 1 nós (n é equivalente ao número de folhas). A comprovação desse fato será deixada como exercício. Figura 3 Árvore estritamente binária. Fonte: TENENBAUM et.al., 1999, p. 304. 9 O nível de um nó numa árvore binária é definido como segue: a raiz da árvore tem nível 0, e o nível de qualquer q outro nó na árvore é um nível a mais que o nível de seu pai. Por exemplo, na árvore binária da Figura 1 (abaixo), o nó E está no nível 2 e o nó H, no nível 3. A profundidade de uma árvore binária significa o nível máximo de qualquer folha na árvore. Isso equivale ao tamanho do percurso mais distante da raiz até qualquer folha. Sendo assim, a profundidade da árvore da Figura 1 é 3. 10 5

Uma árvore completa é uma árvore em que todos os nós com menos de dois filhos ficam no último e no penúltimo nível (Figura 4). Figura 4 Árvore completa. Fonte: O autor. 11 Uma árvore binária cheia é uma árvore em que se um nó tem alguma subárvore vazia, então ele está no último nível (Figura 5). Uma árvore cheia é aquela em, se n é um nó com suas subárvores vazias, então n se localiza no penúltimo ou no último nível. Portanto, toda árvore cheia é completa e estritamente binária. Figura 5 Árvore binária cheia de nível 3. Fonte: TENENBAUM et.al., 1999, p. 308. 12 6

ADT Árvores Binárias Operações Existem operações primitivas que podem ser aplicadas a uma árvore binária. Se p é um ponteiro para um nó nd de uma árvore binária, a função info(p) retorna o conteúdo de nd. As funções left(p), right(p), father(p) e brother(p) retornam referências para o filho esquerdo de nd, filho direito de nd, pai de nd e irmão de nd, respectivamente. Essas funções retornarão o ponteiro null se nd não tiver filho esquerdo, filho direito, i pai ou irmão. Finalmente, as funções lógicas isleft(p) e isright(p) retornam o valor true se nd for um filho esquerdo ou direito, respectivamente, de algum outro nó na árvore, e false, caso contrário. 13 ADT Árvores Binárias Operações Observe que as funções isleft(p), isright(p) e brother(p) podem ser implementadas usando-se as funções left(p), right(p) e father(p). Por exemplo, isleft pode ser implementada assim: q = father(p); if (q == null) return(false); /* p aponta para a raiz */ if (left(q) == p) return(true); return(false); ou, ainda mais simples, como father(p) && p == left(father(p)). isright pode ser implementada de modo semelhante ou chamando isleft. 14 7

ADT Árvores Binárias Operações brother(p) pode ser implementada usando-se isleft ou isright, como segue: if (father(p) == null) return(null); /* p aponta para a raiz */ if (isleft(p)) return(right(father(p))); return(left(father(p))); 15 ADT Árvores Binárias Operações Ao construir uma árvore binária, as operações maketree, setleft e setright são úteis, maketree(x) cria uma nova árvore binária consistindo num único nó com o campo de informação x e retorna uma referência para esse nó. setleft(p,x) aceita uma referência p para um nó de uma árvore binária sem filhos. Ele cria um novo filho esquerdo de node(p) com o campo de informação x. setright(p,x) é análoga a setleft, exceto pelo fato de que ela cria um filho direito de node(p). 16 8

ADT Árvores Binárias Aplicação Uma árvore binária é uma estrutura de dados útil quando precisam ser tomadas decisões bidirecionais em cada ponto de um processo. Por exemplo, suponha que se precisa encontrar as repetições numa lista de números. Uma maneira de fazer isso é comparar cada número com todos os que o precedem. Entretanto, isso envolve um grande número de comparações. 17 ADT Árvores Binárias Aplicação O número de comparações pode ser reduzido usando-se uma árvore binária. O primeiro i número na lista é colocado num nó estabelecido como a raiz de uma árvore binária com as subárvores esquerda e direita vazias. Cada número sucessivo na lista é, então, comparado ao número na raiz. Se coincidirem, tem-se uma repetição. Se for menor, se examina a subárvore esquerda; se for maior, examina-se a subárvore direi- ta. Se a subárvore estiver vazia, o número não será repetido e será colocado num novo nó nesta posição na árvore. Se a subárvore não estiver vazia, compara-se o número ao conteúdo da raiz da subárvore e o processo inteiro será repetido com a subárvore. 18 9

ADT Árvores Binárias Percurso Outra operação comum é percorrer uma árvore binária, ou seja, percorrer a árvore enumerando cada um de seus nós uma vez. Pode-se simplesmente querer imprimir o conteúdo de cada nó ao enumerá-lo, ou se pode processá-lo de alguma maneira. Seja qual for o caso, se fala em visitar cada nó à medida que ele é enumerado. 19 ADT Árvores Binárias Percurso A ordem na qual os nós de uma lista linear são visitados num percurso é do primeiro para o último. Não existe uma ordem "natural" para os nós de uma árvore. Sendo assim, são usados diferentes ordenamentos de percurso em diferentes casos. Definir-se-á três desses métodos de percurso. Em cada um desses métodos, não é preciso fazer nada para percorrer uma árvore binária vazia. Todos os métodos podem ser definidos recursivamente, de modo que percorrer uma árvore binária envolve visitar a raiz e percorrer suas subárvores esquerda e direita. A única diferença entre os métodos é a ordem na qual essas três operações são efetuadas. 20 10

ADT Árvores Binárias Percurso Para percorrer uma árvore binária não-vazia em pré-ordem (conhecida também como percurso em profundidade), efetuam-se as três seguintes operações: 1. Visita-se a raiz. 2. Percorre a subárvore esquerda em ordem prévia (raiz e filhos esq e dir). 3. Percorre a subárvore direita em ordem prévia. 21 ADT Árvores Binárias Percurso Para percorrer uma árvore binária não-vazia em em ordem (ou ordem simétrica regular, igual): 1. Percorre a subárvore esquerda em ordem simétrica (esq raiz dir ). 2. Visita-se a raiz. 3. Percorre a subárvore direita em ordem simétrica. 22 11

ADT Árvores Binárias Percurso Para atravessar uma árvore binária não-vazia em pós-ordem: 1. Percorre a subárvore esquerda em ordem posterior (esq dir raiz). 2. Percorre a subárvore direita em ordem posterior. 3. Visita-se a raiz. 23 ADT Árvores Binárias Por quê? Por que usar árvores binárias? Geralmente, porque ela combina as vantagens de duas outras estruturas: um vetor ordenado e uma lista encadeada. Pode-se buscar numa árvore rapidamente, como em um vetor ordenado, d e pode-se também inserir i e eliminar i itens rapidamente, como em uma lista encadeada. 24 12

ADT Árvores Binárias Implementação Representação de nós em árvores binárias: Como acontece com os nós de listas, os nós de árvores podem ser implementados como elementos de vetores ou como alocações de uma variável dinâmica. 25 ADT Árvores Binárias Representação raiz 26 13

ADT Árvores Binárias Maketree Vamos conhecer o código de implementação para inserir nós numa árvore? 27 ADT Árvores Binárias Definindo classes class Node { int info; Node dir; Node esq; } class Arvore { Node raiz = null; public void cria_arvore(int n){...} } 28 14

ADT Árvores Binárias Definindo Main class J_ Exemplo { public static void main(string args[]){ Arvore arv = new Arvore(); int n=-1; while(n!=0){ n =...("Digite o Elemento(tecle 0 para parar): "); if(n!= 0){ arv.cria_arvore(n); } } 29 ADT Árvores Binárias Criar árvore public void cria_arvore(int n){ Node temp_no = new Node(); temp_no.info = n; if(raiz == null) raiz = temp_no; else{ Node atual = raiz; Node pai; while(true){ pai = atual; if (n < atual.info){ atual = atual.esq; if (atual == null){ pai.esq = temp_no; return; } } else{ atual = atual.dir; if (atual == null){ pai.dir = temp_no; return; } } }}} 30 15

ADT Árvores Binárias Exercício 01 Escreva um programa não recursivo para inserir e em segui- da determinar recursivamente o número de nós numa árvore binária. 31 ADT Árvores Binárias Exercício 02 Altere o programa anterior para determinar recursivamente a soma do conteúdo dos nós numa árvore binária. 32 16

ADT Árvores Binárias Exercício 03 Altere o programa anterior para determinar a média do conteúdo dos nós numa árvore binária. 33 ADT Árvores Binárias Exercício 04 Altere o programa anterior para permitir localizar um determinado valor numa árvore binária. 34 17

ADT Árvores Binárias Exercício 05 Altere o programa anterior para permitir a impressão da árvore binária. 35 ADT Árvores Binárias Exercícios 06. Altere o programa anterior para permitir a exclusão de um nó na árvore binária (para nodos com zero ou um filho). 07. Escreva um programa para determinar a profundidade de uma árvore binária. 08. Escreva um programa recursivo contemplando as funcionalidades das questões 01 a 07. 09. Escreva um programa que solicita um valor e retorne VERDADEIRO se esse nó for a raiz de uma árvore binária válida, e FALSO, caso contrário. 10. Escreva um programa que solicita um valor de um nó da árvore, e retorne o nível do nó na árvore. 36 18

ADT Árvores Binárias Exercícios 11. Escreva um programa não recursivo para inserir inteiros, excluir e percorrer na árvore binária i em ordem, pré-ordem e pós-ordem. 12. Escreva um programa recursivo para inserir inteiros, excluir e percorrer na árvore binária em ordem, pré-ordem e pós-ordem. 13. Escreva um programa para criar uma árvore binária, considerando: a. os percursos em pré-ordem e em ordem dessa árvore; b. os percursos em pré-ordem e pós-ordem dessa árvore. Cada função deve aceitar duas strings de caracteres como parâmetros. A árvore criada deve conter um único caractere em cada nó. 37 19