Árvores Binárias de Pesquisa

Slides:



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

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 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 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
Árvores e Árvores Binárias
Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Pesquisa em Memória Primária
Pesquisa em Memória Primária (cont.)
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
Listas Encadeadas.
Prof. Ernesto Lindstaedt
Fundamentos sobre Árvores
Alocação Dinâmica de Memória
Listas Simplesmente Encadeadas
ALGORITMOS E ESTRUTURAS DE DADOS
exercícios listas encadeadas
Listas Encadeadas Raquel O. Prates, Luiz Chaimowicz, Jussara Almeida
Pesquisa em Memória Primária
Árvores binárias de pesquisa com balanceamento
Denise Guliato Faculdade de Computação – UFU
Denise Guliato Faculdade de Computação – UFU
Denise Guliato Faculdade de Computação – UFU
Denise Guliato Faculdade de Computação – UFU
INTELIGÊNCIA ARTIFICIAL
Principais operações em Listas TPA Listas Simples Inserção no Final 1.void insereNofinalDaLista(Lista *l, Elemento e){ 2.Lista paux,p; 3. p.
TAD Pilha com Alocação Dinâmica de Memória
Implementação de FILAS com Alocação Dinâmica
Heap Sort TPA – Prof. Mateus Costa
Algorítmos e estrutura de dados III
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Algorítmos e estrutura de dados III Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Listas lineares Denise Guliato Faculdade de Computação – UFU
Denise Guliato Faculdade de Computação – UFU
Faculdade de Informática e Tecnologia de Pernambuco ESTRUTURA DE DADOS
© 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
Árvore Binária de Busca
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Árvores Binárias Profa. Patrícia A. Jaques Luiz Gonzaga Jr
Estruturas de Dados Aula 15: Árvores
Prof. Hilton Cardoso Marins Junior ÁRVORES BINÁRIAS.
Prof. Hilton Cardoso Marins Junior
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Estruturas de Dados Aula 10: Listas (parte 2) 07/05/2014.
Introdução a Árvores e Árvores Binárias
Á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.
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
UNIVERSIDADE FEDERAL DE MINAS GERAIS Árvores Cristiano Arbex Valle Vinicius Fernandes dos Santos
Transcrição da apresentação:

Árvores Binárias de Pesquisa

Árvore Binária Definição: Estrutura de dados encadeada de nodos Acíclica Cada nodo pode apontar para 0, 1 ou 2 outros nodos Em uma árvore não vazia existe um nodo distinto chamado raiz.

Arvore Binária Definição Cada nodo de uma árvore binária inicia uma nova árvore. As árvores apontadas pelo nodo raiz são chamadas de sub-árvore esquerda e sub-árvore direita

Árvore Binária raiz

Árvore Binária Definições Os nodos para os quais um nodo (nodo pai) aponta são ditos nodos filhos (esquerdo e direito). Nodo Folha: Nodo da árvore que não possui nenhum filho. A profundidade de um nodo é a distância deste nodo até a raiz.

Árvore Binária Definições Um conjunto de nodos com a mesma profundidade é denominado nível da árvore. Altura de uma árvore binária: Comprimento do caminho entre o nodo raiz e o nodo folha mais distante da raiz. Ou seja é a profundidade do nodo mais profundo.

Árvore Binária de Busca Definição Árvore binária onde: Os nodos possuem uma chave de busca única. os elementos da sub-arvore esquerda são menores que o elemento do nodo raiz e os elementos da sub-árvore direita são maiores que a do nodo raiz (considerando a chave de busca) .

Árvore binária de Busca 5 3 7 raiz 4 2 8 6

O TAD Árvore binária de busca Operações: Inicializa: Cria a árvore vazia (a referência para a raiz é NULL) Pesquisa: Tenta recuperar um elemento existente na árvore dada uma chave de pesquisa. Insere: Insere um elemento na árvore Remove: Remove um elemento da árvore dada uma chave de pesquisa.

Implementação // definição do tipo typedef struct { int valor; int chave; } registro;   typedef struct nodo { registro reg; struct nodo *esq,*dir; }nodo; typedef nodo* arvore;

Implementação Operações: void inicializa(arvore *t); void insere(arvore *t, registro r); registro pesquisa(arvore *t, int x); void retira(arvore *p, int x);

Implementação Inicializa: Faz a raiz apontar para nulo   void inicializa(arvore *t){ *t=NULL; }

Implementação void insere(arvore *t, registro r){ if (*t==NULL){   if (*t==NULL){ *t= malloc(sizeof(nodo)); (*t)->dir=NULL; (*t)->esq=NULL; (*t)->reg=r; } else

Implementação if (r.chave<(*t)->reg.chave) { insere(&(*t)->esq,r); } else if (r.chave>(*t)->reg.chave) { insere(&(*t)->dir,r); printf("Ja existe um nodo com esta chave!");

Implementação registro pesquisa(arvore *t, int x){ if (*t==NULL) { printf("Não existe este elemento\n"); return (registro) {0,0}; } if (x<(*t)->reg.chave) { return pesquisa(&(*t)->esq,x); if (x>(*t)->reg.chave) { return pesquisa(&(*t)->dir,x); return (*t)->reg;

Implementação void antecessor(arvore q, arvore *r) { if ( (*r)->dir != NULL) { antecessor(q,&(*r)->dir); } else { q->reg=(*r)->reg; q = *r; *r= (*r)->esq; free(q);

Implementação void retira(arvore *p, int x) { arvore aux; if ((*p) == NULL) { printf(“registro não existente\n"); } else if ( x< (*p)->reg.chave) { retira(&(*p)->esq,x); if (x> (*p)->reg.chave) { retira(&(*p)->dir,x);

Implementação else if ((*p)->esq==NULL){ aux = *p; *p = (*p)->dir; free(aux); } if ((*p)->dir==NULL){ *p = (*p)->esq; else { antecessor(*p,&(*p)->esq);