EAD Árvore - representação usando listas ligadas



Documentos relacionados
EAD Árvore árvore binária

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

Árvore Binária de Busca

Estruturas de Dados I

Métodos Computacionais. Árvores

Pesquisa em Memória Primária. Prof. Jonas Potros

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

Árvores Binárias de Busca

INF 1007 Programação II

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

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

Linguagem C: Árvores Binarias

Busca. Pesquisa sequencial

Árvores. Algoritmos e Estruturas de Dados 2005/2006

Árvores Binárias de Busca

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

PROGRAMAÇÃO II 4. ÁRVORE

Busca em Memória. Secundária

Algoritmos e Estrutura de Dados III. Árvores

Algoritmos e Estruturas de Dados 2

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

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

BUSCA EM LISTAS LISTAS SEQÜENCIAIS, LISTAS SIMPLESMENTE E DUPLAMENTE ENCADEADAS E LISTAS CIRCULARES

Pedro Vasconcelos DCC/FCUP. Programação Funcional 15 a Aula Árvores de pesquisa

EAD Fila. - algumas operações realizam-se na frente/cabeça e outras na cauda da Fila

Árvores Binárias - continuação

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CIÊNCIAS EXATAS E TECNOLÓGICAS Curso: Informática / Ciência da Computação

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

Árvores Balanceadas. Árvore binária completamente balanceada. Ocorre quando a árvore está cheia ou quase cheia com o nível n-1 completo

ÁRVORES BINÁRIAS DE PESQUISA

ESTRUTURAS DE DADOS II MSc. Daniele Carvalho Oliveira

Árvores Binárias e Busca. Jeane Melo

2ª Lista de Exercícios

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

Árvores AVL. Prof. Othon M. N. Batista Estrutura de Dados

Algoritmos e Estrutura de Dados. Aula 13 Estrutura de Dados: Árvores de Pesquisa Binária Prof. Tiago A. E. Ferreira

Prof. Jesus José de Oliveira Neto

Árvore Binária de Busca. Algoritmos e Estrutura de Dados II. Operações Busca e Sucessor. Árvore Binária de Busca. Árvores Rubro-Negras

DAINF - Departamento de Informática

Algoritmos e Estruturas de Dados: Árvore Binária

Algoritmos e Estruturas de Dados: Árvore Binária de Busca

Mo:vação. Árvore AVL. Caracterís:cas. Origem. Exemplo. Exercício 1 Qual é a altura dos nodos 50 e 44?

Aula 14 Listas Duplamente Encadeadas. prof Leticia Winkler

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática

Á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

CT-234. Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

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

Árvores B + Prof Márcio Bueno. ed2tarde@marciobueno.com / ed2noite@marciobueno.com. Material da Prof a Ana Eliza Lopes Moura

Filas COMANDOS EM C++ PARA IMPLEMENTAÇÃO DE UMA FILA. Biblioteca padrão <queue>

Índice. Capítulo 2 Estrutura de Dados sequencial com armazenamento sequencial

Pesquisa em Memória Primária. Prof. Jonas Potros

;(define conta-folhas ; (lambda ( ) ; (cond ; ( ( ) ) ; ( (and ) ) ; ( else ; ) ) ))

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

Algoritmos e Estrutura de Dados. Prof. Tiago A. E. Ferreira

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

Aula T20 BCC202 Pesquisa (Parte 2) Árvores de Pesquisa. Túlio Toffolo

Árvores Rubro-Negras. Árvores Rubro-Negras. (Vermelho-Preta) Estrutura da Árvore. Estrutura da Árvore

Introdução. Árvore B. CaracterísMcas. Origem do Nome. Exemplo. Grau. Rohit Gheyi. B vem de balanceamento

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

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

Estruturas de Dados Árvores

{ fazer Pós-Ordem sem recursividade. Poderá cair na prova!!! }

Pesquisa digital. Algoritmos e Estruturas de Dados II

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

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

Listas Duplamente Encadeadas

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

ÁRVORE BINÁRIA DE BUSCA

Universidade Federal de Mato Grosso Estrutura de Dados II

Árvore B UNITINS ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 3º PERÍODO 43

Pesquisa Sequencial e Binária

Pesquisa: localização de um Registo num Ficheiro (para aceder ao registo: ler/alterar informação) R. P. António Viera, 23. R. Carlos Seixas, 9, 6º

BC1424 Algoritmos e Estruturas de Dados I. Aula 16: Árvores (introdução) Prof. Jesús P. Mena-Chalco. jesus.mena@ufabc.edu.br

FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto e Análise de Algoritmos II Lista de Exercícios 2

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

Árvores binárias de busca

EAD ARVORE BINÁRIA - ARMAZENAMENTO NÃO SEQUENCIAL COM VETORES

Tópicos Avançados em Estrutura de Dados 6º Período Ciência da Computação Prof. Jean Carlos Hennrichs. Revisão. 2. Lista Estática Duplamente Encadeada

Ordenamento por Borbulhagem (Bubble Sort)

Árvore B. Uma Árvore B de ordem m éumaárvore,talque: Cada nó contém no máximo m

TIPOS ABSTRATOS DE DADOS DEFINIÇÃO E EXEMPLOS. Bruno Maffeo Departamento de Informática PUC-Rio

INF 1010 Estruturas de Dados Avançadas

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

Árvores binárias de busca

Árvores Binárias Balanceadas

Métodos Computacionais. Fila

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

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

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

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

Estruturas de Dados. Profº Carlos Alberto Teixeira Batista

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

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

DAS5102 Fundamentos da Estrutura da Informação

Métodos de Pesquisa em Memória Primária

PROGRAMAÇÃO II 3. FILA DINÂMICA

Árvores de Pesquisa (Parte I)

EAD Árvore - representação usando listas ligadas

Transcrição:

4.1. Definição É uma árvore binária em que os seus nodos têm associado uma chave, que - determina a sua posição de colocação na árvore e - obedece às seguintes regras: a chave de um nodo é - maior do que a chave de qualquer nodo da sua subárvore esquerda e - menor do que a chave de qualquer nodo da sua subárvore direita; - ou seja, a árvore está em ordem crescente. - Desta definição decorre que não podem existir nodos com chaves iguais. Cada nodo pode ser visto como a raíz de duas árvores: - a árvore esquerda com nodos cujas chaves são inferiores à chave da raíz, e - a árvore direita com nodos cujas chaves são superiores à chave da raíz. O objetivo de organizar dados em ABP é facilitar a procura de um elemento: - A partir da raíz e da chave a ser encontrada, é possível saber qual o caminho a ser percorrido até encontrar o elemento/nodo com aquela chave. - Basta verificar se a chave do elemento procurado é maior ou menor à chave do elemento na posição atual.

4.1. Definição Exemplos

4.2. Pesquisar um elemento numa árvore Entrada: ponteiro para a raíz duma árvore e o elemento a procurar Saída: 1 (o elemento existe na árvore); 0 (o elemento não existe na árvore) int Pesquisar (PNodoArv T, Info X) { if (T == NULL) return 0; if (X == T Elemento) return 1; if (X < T Elemento) return Pesquisar(T Esquerda, X); return Pesquisar(T Direita, X);

4.3. Determinar o maior elemento de uma árvore O maior elemento encontra-se no nodo mais à direita da árvore. Entrada: ponteiro para a raíz duma árvore Saída: ponteiro para o nodo com o maior elemento da árvore PNodoArv NodoMaiorElemento (PNodoArv T) { if (T == NULL) return NULL; if (T Direita == NULL) return NodoMaiorElemento(T Direita);

4.3. Determinar o menor elemento de uma árvore O menor elemento encontra-se no nodo mais à esquerda da árvore Entrada: ponteiro para a raíz duma árvore Saída: ponteiro para o nodo com o menor elemento da árvore PNodoArv NodoMenorElemento (PNodoArv T) { if (T == NULL) return NULL; if (T Esquerda == NULL) return NodoMenorElemento(T Esquerda);

4.4. Inserir um elemento numa árvore Este processo tem que obedecer à definição de ABP: - a chave do elemento a inserir não pode ainda existir na árvore e - a sua posição de inserção tem que assegurar que a chave de um elemento é - maior do que as chaves de todos os elementos da sua subárvore esquerda e - menor do que as chaves de todos os elementos da sua subárvores direita. - o novo nodo com este elemento é sempre inserido como folha da árvore.

4.3. Inserir um elemento numa árvore Entrada: ponteiro para a raíz duma árvore e o elemento a inserir Saída: ponteiro para a raíz da árvore (que pode ter sofrido alteração) Pré-requisito: o elemento a inserir não existe na árvore PNodoArv Inserir (PNodoArv T, Info X) { if (T == NULL) { T = CriarNodo(X); if (X < T Elemento) T Esquerda = Inserir(T Esquerda, X); else T Direita = Inserir(T Direita, X);

4.5. Remover um elemento de uma árvore - Deve-se considerar três casos distintos, segundo as características do nodo a remover: - se é uma folha, - se é um nodo com um único filho ou - se é um nodo com dois filhos. - Os mecanismos para tratar os dois primeiros casos são os mesmos descritos para o caso de árvores binárias genéricas. - O mecanismo para tratar o terceiro caso, remoção de um nodo com dois filhos, tem em conta as características de uma árvore binária de pesquisa (os seus elementos estão organizados segundo um critério).

4.5. Remover um elemento de uma árvore Remoção de um nodo com dois filhos - O mecanismo de remoção implica substituir este nodo pelo nodo com chave mais próxima (maior ou menor) da chave do elemento a ser removido. - Esta operação poderá realiza-se de duas formas diferentes: - substituir a informação associada ao nodo a ser removido pela informação do seu sucessor, que é o nodo mais à esquerda da subárvore direita (é o menor elemento da subárvore direita, que é maior do que qualquer elemento da subárvore esquerda); - substituir a informação associada ao nodo a ser removido pelo seu antecessor, que é o nodo mais à direita da subárvore esquerda (é o maior elemento da subárvore esquerda, que é menor do que qualquer elemento da subárvores direita).

4.5. Remover um elemento de uma árvore Remoção de um nodo com dois filhos

4.5. Remover um elemento de uma árvore - Implementação Entrada: ponteiro para a raíz duma árvore e o elemento a remover (existe na árvore) Saída: ponteiro para a raíz da árvore (que pode ter sofrido alteração) PNodoArv Remover (PNodoArv T, Info X) { if (T Elemento == X) { T = RemoverNodo(T); if (X < T Elemento) T Esquerda = Remover(T Esquerda, X); else T Direita = Remover(T Direita, X);

4.5. Remover um elemento de uma árvore - Implementação Possível função para remover um nodo de uma ABP é a que a seguir se apresenta. Entrada: ponteiro para o nodo que se pretende excluir (raíz de subárvore não vazia) Saída: ponteiro para a raíz da subárvore sem um elemento (pode ter sido alterada) PNodoArv RemoverNodo (PNodoArv T) { PNodoArv R; Info X; if (T Esquerda == NULL && T Direita == NULL) { // T é uma folha T = LibertarNodo(T); if (T Esquerda == NULL) { // só um filho direito R = T; T = T Direita; R = LibertarNodo(R);

if (T Direita == NULL) { // só um filho esquerdo R = T; T = T Esquerda; R = LibertarNodo(R); // 2 filhos: remover o nodo sucessor/antecessor e copiar a sua informação T Direita = SubstituirNodoDireita(T Direita, &X); // 1º caso T Esquerda = SubstituirNodoEsquerda(T Esquerda, &X); // 2º caso T Elemento = X;

4.5. Remover um elemento de uma árvore - Implementação Possível função recursiva para substituir a informação associada ao nodo a ser removido pela informação do seu sucessor, que é o nodo mais à esquerda da subárvore direita: Entrada: ponteiro para o nodo que se pretende excluir (raíz de subárvore não vazia) Saída: ponteiro para a raíz da árvore e o elemento do nodo removido PNodoArv SubstituirNodoDireita (PNodoArv T, Info *X) { PNodoArv PAux; if (T Esquerda == NULL) { *X = T Elemento; PAux = T; T = T Direita; PAux = LibertarNodo(PAux); T Esquerda = SubstituirNodo(T Esquerda, X);

4.5. Remover um elemento de uma árvore - Implementação Uma possível função recursiva para substituir a informação associada ao nodo a ser removido pelo seu antecessor, que é o nodo mais à direita da subárvore esquerda: Entrada: ponteiro para o nodo que se pretende excluir (raíz de subárvore não vazia) Saída: ponteiro para a raíz da árvore e o elemento do nodo removido PNodoArv SubstituirNodoEsquerda (PNodoArv T, Info *X) { PNodoArv PAux; if (T Direita == NULL) { *X = T Elemento; PAux = T; T = T Esquerda; PAux = LibertarNodo(PAux); T Direita = SubstituirNodo(T Direita, X);