Árvore Binária de Busca

Slides:



Advertisements
Apresentações semelhantes
LISTAS Dilvan Moreira, parcialmente baseado em material do prof. Ricardo Campello.
Advertisements

Aula T-09 – BCC202 Listas (Parte 1) Túlio Toffolo www. decom. ufop
Marco Antonio Montebello Júnior
Estruturas de Dados Árvores Binárias
Listas encadeadas Prof. Rosana Palazon.
Listas duplamente encadeadas
Programação II Estruturas de Dados
TADS – Tipos Abstratos de Dados
Árvores.

David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária
Pesquisa em Árvores Digitais
David Menotti Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária – Árvores de Busca
David Menotti Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária – Árvores de Busca
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária
Árvores Introdução e Aplicações Árvores de Busca Binária Fundamentos
AED – Algoritmos e Estruturas de Dados
Árvores Binárias de Pesquisa (ABP)
Árvores e Árvores Binárias
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Listas com Ponteiros Listas encadeadas Listas circulares.
Slides: Prof. João Fabro UTFPR - Curitiba
Slides: Prof. João Fabro UTFPR - Curitiba
Lista Encadeada Circular Lista Duplamente Encadeada
Robson Godoi / Sandra Siebra
Listas Encadeadas.
Fundamentos sobre Árvores
ALGORITMOS E ESTRUTURAS DE DADOS
exercícios listas encadeadas
Listas Encadeadas Raquel O. Prates, Luiz Chaimowicz, Jussara Almeida
Algoritmos e Estruturas de Dados II
Pesquisa em Memória Primária
Árvores binárias de pesquisa com balanceamento
Árvores Binárias de Pesquisa
Implementação de FILAS com Alocação Dinâmica
Algorítmos e estrutura de dados III
Lista Encadeada Circular Lista Duplamente Encadeada
Algorítmos e estrutura de dados III Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação
Faculdade de Informática e Tecnologia de Pernambuco ESTRUTURA DE DADOS
Rotação Simples e Dupla Katia Guimarães
Listas de Prioridades Em muitas aplicações, dados de uma coleção são acessados por ordem de prioridade A prioridade associada a um dado pode ser qualquer.
© Copyright 2007 Algoritmos e Estruturas de Dados - Todos os direitos reservados Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto.
Estruturas de Dados Aula 11: TAD Pilha
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática Disciplina: Estrutura de Dados Professor: Cheli dos S. Mendes da Costa Listas.
Filas. #define MAXFILA 100 typedef struct queue { int item [ MAXFILA]; int inic, fim; } fila; fila q;
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Árvores Prof. Dr. rer. nat. Daniel Duarte Abdala DAS 5102 – Fundamentos da Estrutura da Informação 1.
Árvores Binárias Profa. Patrícia A. Jaques Luiz Gonzaga Jr
Estruturas de Dados Aula 15: Árvores
– Aula 20 Adaptado por Reinaldo Fortes para o curso de
Prof. Hilton Cardoso Marins Junior ÁRVORES BINÁRIAS.
© 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice.
Prof. Hilton Cardoso Marins Junior
Introdução a Árvores e Árvores Binárias
Profa. Juliana Mafra ESTRUTURA DE DADOS 30 de Setembro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.
Árvores e Árvores Binárias
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva Botelho Matheus Bispo.
Lista Ligada Estrutura de Dados II Prof. Gale. Vantagens  Crescem (ou decrescem) à medida que elementos são inseridos (ou removidos)  seqüência encadeada.
UNIVERSIDADE FEDERAL DE MINAS GERAIS Árvores Cristiano Arbex Valle Vinicius Fernandes dos Santos
Árvores.
Transcrição da apresentação:

Árvore Binária de Busca Estrutura de Dados II Prof. Gale

Árvores Conceitos Existem alguns conceitos que são comuns a todos os tipos de árvores. Eis alguns desses conceitos que devemos conhecer: Nó: item de informação com ramos para outros nós (descendentes). Grau: número de sub-árvores de um nó. Folhas: nós terminais (grau = 0). Filhos de um nó: raízes das sub-árvores desse nó. Pai: ancestral direto de um nó. Grau de uma árvore: grau máximo dos nós da árvore. Ancestral de um nó: todos os nós a partir da raiz até o pai do nó. Descendentes de um nó: todos os nós nas sub-árvores de um nó. Nível de um nó:Raiz tem nível 1. Nó no nível i, seus filhos estão no nível i+1 Altura/profundidade de uma árvore: nível maior considerando qualquer nó da árvore.

Árvores binárias – árvore binária balanceada: • os nós internos têm todos, ou quase todos, 2 filhos • qualquer nó pode ser alcançado a partir da raiz em O(log n) passos

Árvore Binária É um conjunto finito de nós que pode ser vazio ou consistir de uma raiz e duas árvores binárias disjuntas chamadas sub-árvore esquerda e direita.

Fazendo Relação... “Nó Lista Ligada” X

X “Nó de uma Árvore Binária”

Ilustrando, ficaria...

Árvore Binária de Busca

Árvores binárias de busca – o valor associado à raiz é sempre maior que o valor associado a qualquer nó da sub-árvore à esquerda (sae) – o valor associado à raiz é sempre menor ou igual (para permitir repetições) que o valor associado a qualquer nó da sub-árvore à direita (sad) – quando a árvore é percorrida em ordem simétrica (sae - raiz - sad), os valores são encontrados em ordem não decrescente

Inserção de Nós

Outra inserção...

Nova Inserção...

E por fim...

Tipo árvore binária – árvore é representada pelo ponteiro para o nó raiz struct arv { int info; struct arv* esq; struct arv* dir; }; typedef struct arv Arv;

Operação de criação: – árvore vazia representada por NULL Arv* abb_cria (void) { return NULL; }

Operação de impressão: – imprime os valores da árvore em ordem crescente, percorrendo os nós em ordem simétrica void abb_imprime (Arv* a) { if (a != NULL) abb_imprime(a->esq); printf("%d\n",a->info); abb_imprime(a->dir); }

Pesquisa em árvores binárias de busca – compare o valor dado com o valor associado à raiz – se for igual, o valor foi encontrado – se for menor, a busca continua na sae – se for maior, a busca continua na sad

Operação de busca: – explora a propriedade de ordenação da árvore – possui desempenho computacional proporcional à altura (O(log n) para o caso de árvore balanceada) Arv* abb_busca (Arv* r, int v) { if (r == NULL) return NULL; else if (r->info > v) return abb_busca (r->esq, v); else if (r->info < v) return abb_busca (r->dir, v); else return r; }

Operação de inserção: – recebe um valor v a ser inserido – retorna o eventual novo nó raiz da (sub- árvore) – para adicionar v na posição correta, faça: se a (sub-)árvore for vazia – crie uma árvore cuja raiz contém v • se a (sub-)árvore não for vazia – compare v com o valor na raiz – insira v na sae ou na sad, conforme o resultado da comparação

Operação de remoção: – recebe um valor v a ser inserido – retorna a eventual nova raiz da árvore – para remover v, faça: • se a árvore for vazia – nada tem que ser feito • se a árvore não for vazia – compare o valor armazenado no nó raiz com v – se for maior que v, retire o elemento da sub-árvore à esquerda – se for menor do que v, retire o elemento da sub-árvore à direita – se for igual a v, retire a raiz da árvore

Operação de remoção (cont.): – para retirar a raiz da árvore, há 3 casos: • caso 1: a raiz que é folha • caso 2: a raiz a ser retirada possui um único filho • caso 3: a raiz a ser retirada tem dois filhos

Exercícios 1.) Desenvolva um programa em “C” que crie uma árvore e insira dados nesta árvore. #include <stdio.h> #include <conio.h> #include <stdlib.h> // definindo a estrutura da arvore struct arv { int info; struct arv* esq; struct arv* dir; }; typedef struct arv Arv;

// Criação da árvore Arv* abb_cria (void) { return NULL; } // Inserção de um nó Arv* abb_insere (Arv* a, int v) if (a==NULL) a = (Arv*)malloc(sizeof(Arv)); a->info = v; a->esq = a->dir = NULL; else if (v < a->info) a->esq = abb_insere(a->esq,v); else /* v > a->info */ a->dir = abb_insere(a->dir,v); return a;

E a impressão??? A Visualização dos dados...??? int main() { Arv* arvore; arvore = abb_cria(); arvore = abb_insere(arvore,5); arvore = abb_insere(arvore,7); arvore = abb_insere(arvore,2); arvore = abb_insere(arvore,11); arvore = abb_insere(arvore,13); getch(); return 0; } E a impressão??? A Visualização dos dados...???

Função de Impressão // impressão dos dados da árvore void abb_imprime (Arv* a) { if (a != NULL) abb_imprime(a->esq); printf("%d\n",a->info); abb_imprime(a->dir); }

Exercícios Propostos Exercicio 1 - Gere uma arvore de 20 nós com valores aleatórios de 0 a 100 e mostre a arvore e os endereços na tela

Exercícios Propostos Exercicio 2 - Implemente uma função que retorne a quantidade de folhas de uma árvore binária. Essa função deve obedecer ao protótipo: // int folhas (Arv* a)

Exercícios Propostos Exercicio 3 - Implemente uma função que compare se duas árvores binárias são iguais. Essa função deve obedecer ao protótipo: // Arv* igual (Arv* a, Arv* b)