Árvore Binária de Busca



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

EAD Árvore - representação usando listas ligadas

Estruturas de Dados I

Árvores Binárias de Busca

Árvores Binárias de Busca

EAD Árvore árvore binária

Busca. Pesquisa sequencial

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

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

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

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

INF 1007 Programação II

Linguagem C: Árvores Binarias

Árvores. Algoritmos e Estruturas de Dados 2005/2006

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

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

Métodos Computacionais. Árvores

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

PROGRAMAÇÃO II 4. ÁRVORE

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

Árvores Binárias e Busca. Jeane Melo

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

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

Pesquisa Sequencial e Binária

Árvores Binárias - continuação

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

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

2ª Lista de Exercícios

Algoritmos e Estruturas de Dados 2

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

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

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

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

ÁRVORES BINÁRIAS DE PESQUISA

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

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

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

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

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

Algoritmos e Estruturas de Dados: Árvore Binária

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

ESTRUTURAS DE DADOS II MSc. Daniele Carvalho Oliveira

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

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

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

Pesquisa digital. Algoritmos e Estruturas de Dados II

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

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

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

Árvores AVL e Árvores B. Jeane Melo

Busca em Memória. Secundária

Árvores Binárias Balanceadas

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

Algoritmos e Estrutura de Dados III. Árvores

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

FUNDAÇÃO EDUCACIONAL DE ITUIUTABA

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

Sumário. 5COP096 Teoria da Computação Aula 8 Pesquisa em Memória Primária

Fila de Prioridade. Siang Wun Song - Universidade de São Paulo - IME/USP. MAC Estruturas de Dados

B D. Árvores Ordenadas

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

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

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

Árvores binárias de busca

Estruturas de Dados Árvores

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

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

Aula 20: Árvores Binárias de Busca. Algoritmos de busca e inserção

Unidade 5 Armazenamento e Indexação

Listas Duplamente Encadeadas

INF 1010 Estruturas de Dados Avançadas

ÁRVORE BINÁRIA DE BUSCA

Estruturas de Dados Pilhas, Filas e Deques

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

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

Á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

DAS5102 Fundamentos da Estrutura da Informação

ESTRUTURAS DE DADOS AVANÇADAS (INF 1010) (a) Seja um TAD definido por uma lista circular implementada em um vetor.

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

DAINF - Departamento de Informática

Árvores Trie e Patricia. Márcio Bueno ed2tarde@marciobueno.com / ed2noite@marciobueno.com

Linguagem Haskell. Maria Adriana Vidigal de Lima

Árvores de Suporte de Custo Mínimo

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

Árvores & Árvores Binárias

Árvores Binárias de Busca

ESTRUTURA DE DADOS DCC013

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

Transcrição:

Árvore Binária de Busca 319

Árvore Binária de Busca! construída de tal forma que, para cada nó:! nós com chaves menores estão na sub-árvore esquerda! nós com chaves maiores (ou iguais) estão na subárvore direita! a inserção dos nós da árvore deve satisfazer a essa propriedade 320

Árvore Binária de Busca! para a busca de uma chave v na árvore binária de busca:! primeiro compare com a raiz! se menor, vá para a sub- árvore esquerda! se maior, para a sub-árvore direita! aplique o método recursivamente 321

Árvore Binária de Busca 6 4 9 3 5 8 10 2 Buscando a chave 9 322

Árvore Binária de Busca! a cada passo, garante-se que nenhuma outra parte da árvore contém a chave sendo buscada! o procedimento pára quando! o nó com v é encontrado! senão, chega-se a NULL 323

Árvore Binária de Busca chama a função de busca se a árvore é não vazia busca_arvore_nao_recursivo (v, pt) {??? } 324

Árvore Binária de Busca busca_arvore_nao_recursivo (v, pt) { } do { if (v < pt->info) pt = pt-> esq; else pt = pt-> dir; }while (pt!= NULL) && (v!= pt->info); return(pt); 325

Inserindo em Árvore Binária de Busca! Para inserir um nó na árvore:! fazer uma busca com insucesso! alocar um novo nó! é necessário saber por qual nó se chegou a NULL! será o pai do novo nó 326

Inserindo em Árvore Binária de Busca 6 4 9 3 5 8 10 2 Inserindo o 9 327

Inserindo em Árvore Binária de Busca 6 4 9 3 5 8 10 7 2 Inserindo o 7 328

Inserção Árvore Binária de Busca insere_árvore (int valor, tipo_nó * pt) { } 329

Inserção Árvore Binária de Busca insere_árvore (int valor, tipo_nó * pt) { tipo_nó * pai; do{ pai = pt ; if (valor < pt->chave) pt = pt ->esq ; else if ( valor > pt-> chave) pt = pt->dir; } while(pt!= NULL) && (pt->chave!= valor); if (pt == NULL){ pt = aloca(); pt ->chave = valor; pt->esq = NULL; pt->dir = NULL; if (v < pai->chave) pai ->esq = pt ; else pai ->dir = pt ; return(pt); } } 330

Inserção Árvore Binária de Busca! a árvore está classificada se percorrida da forma correta (pre, pos ou em-ordem?)! as chaves aparecem em ordem se lidas da esquerda para a direita! podemos ordenar uma sequência como se fosse uma série de inserções! o programa tem apenas os ponteiros para se preocupar! qual a diferença 331

Remoção em Árvore Binária de Busca! até então, vimos que a implementação da operação de inserção é simples! a remoção de um elemento já é mais complexa! remoção de um nó folha! os ponteiros esquerdo e direito do pai são setados para NULL! se possui apenas um filho! o ponteiro apropriado do pai passa a apontar para o filho! se o nó possui dois filhos! se um desses dois filhos não possui filhos, use esse nó para substituir o nó removido 332

Remoção em Árvore Binária de Busca! senão: substituir o valor do nó a ser removido! substitua este com o elemento cuja chave é imediatamente maior (ou menor)! é sempre folha?! senão for folha vá repetindo o procedimento! algoritmo? 333

Remoção em Árvore Binária de Busca 6 4 9 3 5 8 10 2! Removendo 5: 7! basta que o ponteiro a direita de 4 aponte para NULL 334

Remoção em Árvore Binária de Busca 6 4 9 3 5 8 10 2! Removendo 3: 7! basta que substituir o nó 3 pelo nó 2! continua valendo a regra de formação da árvore 335

Remoção em Árvore Binária de Busca 6 4-5 9 3 5 8 10 2! Removendo 4: 7! basta que o substituir 4 pelo 5! continua valendo a regra de formação da árvore 336

Remoção em Árvore Binária de Busca 6-7 4 9 3 5 8 10 2 7! Removendo 6 (raiz):! substituir o 6 pelo imediatamente maior: 7 como determinar?! resulta na remoção do elemento de chave 7 337

Remoção em Árvore Binária de Busca remove_abb (int valor, tipo_nó * pt) { tipo_nó * pai; /* a busca */ do{ pai = pt ; if (valor < pt->chave) pt = pt ->esq ; else if ( valor > pt-> chave) pt = pt->dir; } while(pt!= NULL) && (pt->chave!= valor); if (pt!= NULL){ /* ok, encontrou o valor na ABB */ 338

Remoção em Árvore Binária de Busca if (pt!= NULL){ /* ok, encontrou o valor na ABB */ /* se é um nó interno com duas subárvores vazias */ if (p-> esq!= NULL) && (pt->dir!= NULL){ ptaux = pt; pai = pt; pt = pt->dir; while (pt->esq!= NULL) { /* acha o imediatamente maior */ pai = pt; pt = pt->esq; } /* troca o valor do nó a ser retirado pelo imediatamente maior */ ptaux->valor = pt->valor; } 339

Remoção em Árvore Binária de Busca if (pt!= NULL){ /* ok, encontrou o valor na ABB */ /* se é um nó interno com duas subárvores vazias */... if (pt->esq!= NULL) && (pt-> dir == NULL){ /* só tem o filho esq */ if (pai->esq ==pt) pai->esq = pt->esq; else pai->dir = pt->esq; } else if (pt->esq == NULL) && (pt-> dir!= NULL){ /* só tem o filho direito */ if (pai->esq ==pt) pai->esq = pt->dir; else pai->dir = pt->dir; } else{/* então é folha */ if (pai->esq ==pt) pai->esq = NULL; else pai->dir = NULL; } free (pt); } 340

Árvore Binária de Busca! A árvore obtida depende da seqüência de inserção de nós! Para que a árvore binária de busca seja completa! completa tem altura mínima! o conjunto das chaves deve ser reordenado! árvore comum - O (n)! árvore completa - O (log n) 341

Árvore Binária de Busca! uma árvore binária de busca completa! o conjunto das chaves deve ser re-ordenado! sejam s o e s n+1 duas chaves fictícias e já inseridas! a cada passo inserir em T uma nova chave que seja de índice médio entre i e j - duas chaves já inseridas 342

Árvore Binária de Busca! árvore completa: ótima para a busca! quando a freqüência de acesso aos nós é igual! normalmente estas freqüências são diferentes! é interessante construir uma árvore binária que seja a melhor possível no que diz respeito à busca para freqüências conhecidas 343

Eficiência da Árvore de Busca! Depende da ordem original dos dados! Se o array original está ordenado (ascendente ou descendente), as árvores resultantes só tem filhos a direita ou a esquerda! a inserção do 1o. nó - 0 comparações! a inserção do 2o. nó - 2 comparações! a inserção do 3o. nó - 3 comparações! 2 + 3 +...+n = n*(n+1)/2-1! Complexidade - O(n 2 ) - para inserir n nós 344

Eficiência da Árvore de Busca! Se a lista original estiver organizada, e se uma árvore completa (parecida com completa) for se formando:! complexidade da inserção = O( n log n ) 345