A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Árvore Binária de Busca Estrutura de Dados II Prof. Gale."— Transcrição da apresentação:

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

2 Á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.

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

4 Á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.

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

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

7 Ilustrando, ficaria...

8 Árvore Binária de Busca

9 Á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

10 Inserção de Nós

11 Outra inserção...

12 Nova Inserção...

13 E por fim...

14 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;

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

16 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) if (a != NULL) { abb_imprime(a->esq); abb_imprime(a->esq); printf("%d\n",a->info); printf("%d\n",a->info); abb_imprime(a->dir); abb_imprime(a->dir); }}

17 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

18 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; 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->esq, v); else if (r->info dir, v); else if (r->info dir, v); else return r; else return r;}

19 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 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

20

21 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 se a árvore for vazia – nada tem que ser feito se a árvore não for vazia 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

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

23

24

25

26

27

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

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

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

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

32 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

33 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: 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)

34 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: 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)


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

Apresentações semelhantes


Anúncios Google