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

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

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

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

DATA STRUCTURES, AN ADVANCED APPROACH USING C

Árvores & Árvores Binárias

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

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

Árvores & Árvores Binárias

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

Árvore binária - definição

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

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

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

DAINF - Departamento de Informática

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

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

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

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

Aula 08. Estruturas de dados Árvore e Grafo

Árvores Binárias de Busca

Universidade Federal de Mato Grosso Estrutura de Dados II

Grafos - Aplicação. Implemente na linguagem C a função procurarcaminho(...).

UNIVERSIDADE DA BEIRA INTERIOR

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

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

Algoritmos e Estruturas de Dados Prof. Osório PIP/CA - Aula 05 Pag.: 1

Árvores. Sérgio Carlos Portari Júnior

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

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

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

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

Carlos Eduardo Batista. Centro de Informática - UFPB

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

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

Pilhas e Filas Encadeadas. Algoritmos e Estruturas de Dados I

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

INF1010 Lista de Exercícios 2

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

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

2. Considerando as seguintes declarações de uma lista encadeada

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

Estruturas de Dados Aula 11: TAD Pilha

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

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

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

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

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

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

ÁRVORE BINÁRIA DE BUSCA

Listas: nós de cabeçalho, listas não homogêneas, listas generalizadas

Métodos Computacionais. Árvores

Organizam dados de forma hierárquica. Acontecem com frequência na natureza. Fáceis de representar e manipular com computadores

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

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

Arvores binárias. Fonte: PF 14 pf/algoritmos/aulas/bint.html

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

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

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

Filas Exemplo de Aplicação

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

Listas: nós de cabeçalho, listas não homogêneas, listas generalizadas. SCC-502 Algoritmos e Estruturas de Dados I

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

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

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

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

Árvores Binárias Balanceadas Estrutura de Dados I

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

Árvores Binárias de Busca

Aula T13 BCC202 Árvores. Túlio Toffolo

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

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

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

SCC 202 Algoritmos e Estruturas de Dados I. Pilhas (Stacks) (implementação dinâmica)

Aula 14 Listas Duplamente Encadeadas. prof Leticia Winkler

SCC Algoritmos e Estruturas de Dados I

INF 1007 Programação II

Árvores B. Prof. Márcio Bueno. / Fonte: Material da Prof a Ana Eliza Lopes Moura

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

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

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

Árvores binárias de busca

Pesquisa em memória primária

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

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

PAA-DCC-UFAM. Árvores. Universidade Federal do Amazonas Departamento de Eletrônica e Computação

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

UNIVERSIDADE DA BEIRA INTERIOR

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

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

Prof. Jesus José de Oliveira Neto

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

Estrutura de Dados II. Prof. Sérgio Portari

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.

ÁRVORE BINÁRIA DE BUSCA TDA-ABB

Transcrição:

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

Arvores binárias encadeadas Percorrer uma árvore é uma operação muito comum e seria útil encontrar um método mais eficiente para implementar percursos. Em nosso algoritmo de percurso não recursivo usamos uma pilha que é desempilhada quando: O programa desceu pelas ramificações esquerdas até encontrar um ponteiro NULL, empilhando o ponteiro a cada passagem pelos nós (se mantemos q auxiliar no nó anterior não teremos que usar a pilha). Em outro caso onde p é NULL é ao alcançar um nó com uma subrárvore direita vazia, executando p->right e repetindo o do while. Nesse ponto teríamos perdido nosso trajeto caso ele não fosse a pilha cujo topo aponta para a árvore cuja sub-árvore esquerda acaba de ser percorrida

#define MAXSTACK 100 void intrav2(nodeptr tree){ struct stack{int top; NODEPTR item [MAXSTACK];}s; s.top = -1;p = tree; do{ /*percorre desv. esq o max possível salvando ponteiro para nós passados*/ while(p!=null){ push(s, p); p = p->left; }//fim-while //verifica termino if (! empty(s)){ D G /*neste ponto a subarv esq esta vazia*/ p = pop(s); printf( %d\n, p->info);//visita a raiz p = p->right;//percorre subarv direito }//fim-if } while (!empty(s) && p!=null);} A B C E H I F

A solução: Em vez de ter um ponteiro a NULL no campo right, um nó com uma subárvore direita vazia contivesse um ponteiro para o nó que estaria no topo da pilha nesse momento (isto é um ponteiro para seu sucessor em ordem) A B A B C C D D E F E F G H G H I I J K L

Arvores encadeados a direita Desse jeito não teríamos necessidade de uma pilha, uma vez que o último nó visitado durante um percurso de uma subárvore esquerda aponta diretamente para seu sucessor em ordem. Esse ponteiro é chamado de linha e deve ser diferenciado de um ponteiro de uma árvore para associar um nó a sua subárvore esquerda ou direita. Esses árvores são chamados de encadeados à direita.

Arvores encadeados a direita Para a implementação um campo lógico extra deverá ser incluído em cada nó (rthread) para indicar se seu ponteira à direita é ou não uma linha. Para coerência o campo rthread do nó extrema direita de uma árvore (isto é, o último nó na travessia em ordem de uma árvore) é definido como TRUE, embora seu campo right permaneça NULL. Assim um nó é definido como: struct nodetype { int info; struct nodetype *left; //pont. p/ filho esq. struct nodetype *right; //pont. p/ filho dir. int rthread; //será TRUE se right //for NULL ou uma //linha não-null };

Arvores encadeados a direita Exercício: Implemente uma rotina par percurso em ordem de uma árvore binária encadeada à direita. Observação: Numa árvore encadeada à direita, o sucessor em ordem de qualquer nó pode ser encontrado com eficiência

Percurso usando o campo father Se cada nó da árvore contiver um campo father, não será necessário nem uma pilha nem linhas para o percurso não recursivo Quando o processo de percurso atingir um nó folha o campo father poderá ser usado para reescalar a árvore de volta. Quando node(p) for alcançado a partir de um filho esquerdo, sua subárvore direita precisara ainda ser percorrida, portanto, o algoritmo continuará em right(p). Quando node(p) for alcançado a partir de seu filho da direita, suas duas subárvores terão sido percorridos e o algoritmo retornará para o father(p)

Percurso usando o campo father Os percursos em pre e pos ordem para árvores encadeadas à direita são similares. Os percursos usando o campo father para subir de volta é menos eficiente em termos de tempo, do que no caso do percurso de árvores encadeado. Uma linha aponta diretamente para o sucessor do nó enquanto uma seqüência inteira de ponteiros father talvez precise ser seguida para alcançar esse sucessor numa árvore encadeada Exercício: Implemente o percurso em ordem usando o campo father

Percurso usando o campo father Outra opção é a medida que descemos na árvore inverter a o ponteiro do filho, assim sempre é possível encontrar o caminho de volta sem precisar o campo father, no percurso de subida retornamos o ponteiro no seu valor original. Exercício: Implemente a rotina de percurso em ordem usando essa opção.

Arvores binárias heterogêneas Frequentemente as informações contidas em diferentes nós de uma árvore binária não são todas do mesmo tipo. Exemplo, expressões aritméticas representadas pela árvore onde, nós folha representam os operandos e nós não folhas os operadores. Como representaríamos isso?? + + 3 3 / * 5 4-6 6

Arvores binárias heterogêneas Usando uma união para representar a parte da informação do nó. Cada nó deverá conter um campo que indica o tipo de informação é. #define OPERATOR 0 #define OPERAND 1 struct nodetype{ short int utype; union { char chinfo; float numinfo; } info; struct nodetype *left; struct nodetype *right; }; typedef struct nodetype *NODEPTR;

Função que aceita um ponteiro a uma árvore desse tipo e devolve o valor da expressão representada pela árvore. float evalbintree(nodeptr tree){ float opnd1, opnd2 char symb; if (tree->utype == OPERAND) return (tree->numinfo); opnd1 = evalbintree(tree->left); opnd2 = evalbintree(tree->rigth); symb = tree->chinfo; return = oper (symb, opnd1, opnd2); }

float oper(char symb,float op1, float op2){ switch(symb) { case '+': return op1 + op2; case '-': return op1 - op2; case '*': return op1 * op2; case '/': if (op2) return op1/op2; else { printf("divisao por zero"); exit(1); } } exit(1); }

Outros tipos de árvores Arvores gerais e sua representação binária Arvores balanceadas, eficiência nos percursos e busca de elementos. Operações de rotação, inserção e eliminação numa árvore balanceada.