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

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

Introdução a Árvores e Árvores Binárias

Apresentações semelhantes


Apresentação em tema: "Introdução a Árvores e Árvores Binárias"— Transcrição da apresentação:

1 Introdução a Árvores e Árvores Binárias
Prof. Kariston Pereira Adaptado de Material gentilmente fornecido pelo Prof. Rui Tramontin (DCC/UDESC)

2 UDESC – Prof. Kariston Pereira
Tópicos Abordados Introdução Definição de Árvore Árvores Binárias UDESC – Prof. Kariston Pereira

3 UDESC – Prof. Kariston Pereira
Introdução Necessidade de se representar estruturas de dados hierárquicas. Estrutura de diretórios Taxonomias Organogramas Sintaxe de expressões Tais estruturas são representadas por Árvores. UDESC – Prof. Kariston Pereira

4 UDESC – Prof. Kariston Pereira
Introdução Exemplos: expressão, taxonomia a + (b * c) / d Animal a b c * + / d Mamífero Ave Réptil Primata Cetáceo ... ... Homem Gorila Baleia UDESC – Prof. Kariston Pereira

5 UDESC – Prof. Kariston Pereira
Introdução Exemplo: sistema de arquivos UDESC – Prof. Kariston Pereira

6 UDESC – Prof. Kariston Pereira
Tópicos Abordados Introdução Definição de Árvore Árvores Binárias UDESC – Prof. Kariston Pereira

7 UDESC – Prof. Kariston Pereira
Definição de Árvore Definição recursiva: Conjunto de nós. Existe um nó r denominado raiz, com zero ou mais sub-árvores, cujas raízes são ligadas diretamente a r. Os nós raízes das sub árvores são ditos filhos de r. nó raiz ... sub-árvores UDESC – Prof. Kariston Pereira

8 UDESC – Prof. Kariston Pereira
Conceitos Básicos Grau de saída: número de filhos (sub-árvores) de um nó. Nó folha: grau de saída = 0. Nó interno: grau de saída > 0. Caminho: sequência de nós que tenham relação pai-filho. Nível de um nó: número de nós no caminho até r. Altura de árvore: maior nível dentre seus nós. UDESC – Prof. Kariston Pereira

9 UDESC – Prof. Kariston Pereira
Conceitos Básicos Grau = 3 Nós internos A Nível = 2 Altura = 3 B C D E F G H I J K Nós folhas UDESC – Prof. Kariston Pereira

10 UDESC – Prof. Kariston Pereira
Tópicos Abordados Introdução Definição de Árvore Árvores Binárias UDESC – Prof. Kariston Pereira

11 UDESC – Prof. Kariston Pereira
Árvores Binárias Definição: é a árvore onde todos os seus nós têm grau <= 2. Portanto, cada nó pode ter um filho (sub-árvore) à esquerda e um filho à direira. UDESC – Prof. Kariston Pereira

12 Tipos de Árvores Binárias
Estritamente Binária: todo nó interno tem exatamente 2 filhos. Completa (Cheia): estritamente binária, e todas as folhas estão no mesmo nível. Balanceada: para todo nó, a diferença de altura de suas sub-árvores é de no máximo 1. Degenerada: todos os nós têm no máximo 1 filho (lista encadeada). UDESC – Prof. Kariston Pereira

13 Tipos de Árvores Binárias: Quase Completa
Uma Árvore Binária de profundidade d será uma Árvore Binária Quase Completa se: Cada follha na árvore estiver no nível d ou no nível d – 1 (até o nível d – 1 ela é completa); Para cada nó nd na árvore com um descendente direito no nível d, todos os descendentes esquerdos de nd que forem folhas devem estar ao menos no nível d; Uma árvore binária quase completa tem todos os seus níveis completos exceto o último, o qual pode ter apenas os elementos mais à esquerda. S UDESC – Prof. Kariston Pereira

14 Tipos de Árvores Binárias: Quase Completa
Os nós de uma árvore binária quase completa podem ser numerados, de modo que seja atribuído o número 1 à raiz, um filho esquerdo receba a atribuição de um número equivalente ao dobro do número atribuído ao seu pai, e um filho direito receba a atribuição de um número equivalente a um mais que o dobro do número atribuído a seu pai. Os nós são numerados começando da raiz, de cima para baixo e da esquerda para a direita, sem que haja a ausência de nós. S UDESC – Prof. Kariston Pereira

15 UDESC – Prof. Kariston Pereira
Implementação (1/4) Nós de uma árvore podem ser representados: Estaticamente. Dinamicamente. Estaticamente, usa-se vetores: Para cada nó i, seu filho à esquerda está em 2i + 1 e seu filho à direita está em 2i + 2. UDESC – Prof. Kariston Pereira

16 UDESC – Prof. Kariston Pereira
Implementação (2/4) Representação Dinâmica: Nós são implementados como registros (alocados dinamicamente) ou classes. Cada nó tem campos que armazenam a informação propriamente dita e referências a seus nós filhos. Exemplo em C (quando o percurso é feito sempre de cima para baixo, da raiz para as folhas): struct no { char info; struct node *left; struct node *right; }; typedef struct no node; UDESC – Prof. Kariston Pereira

17 UDESC – Prof. Kariston Pereira
Implementação (3/4) Representação dos nós. A A B C B C D E F D E F G G UDESC – Prof. Kariston Pereira

18 UDESC – Prof. Kariston Pereira
Implementação (4/4) Funções típicas em uma Árvore Binária: Inicializar árvore vazia (maketree); Incluir nó (setleft, setright); Pesquisar nó (informação); Excluir nó; Remover sub-árvore; Calcular altura da árvore; Percorrer a árvore (pré-, em-, pós-ordem). UDESC – Prof. Kariston Pereira

19 Funções Típicas Essenciais
node* maketree(int x) { node *p; p = getnode(); p->info = x; p->left = NULL; p->right = NULL; return (p); } setleft (node *p, int x) { if (p == null) printf (“inserção vazia\n”); else if (p->left != NULL) printf (“inserção incorreta\n”); else p->left = maketree(x); } setright (node *p, int x) { if (p == null) printf (“inserção vazia\n”); else if (p->right != NULL) printf (“inserção incorreta\n”); else p->right = maketree(x); } UDESC – Prof. Kariston Pereira

20 Funções Típicas Essenciais
Algoritmo Exemplo para “Inserção Ordenada Sem Repetição” int number; node *tree, *p, *q; scanf(“%d”, &number); tree = maketree(number); while (houver números na entrada) { p = q = tree; while (number != info(p) && q != NULL) p = q; if (number < info(p)) q = left (p); //obtem o filho esq. de p else q = right (p); //obetem o filho dir. de p } if (number == info(p)) printf (“%d %s\n”, number, “está repetido!”); else if (number < info(p)) setleft (p, number); setright (p, number); UDESC – Prof. Kariston Pereira

21 Travessia em Árvores Binárias
Há várias maneiras de percorrer os nós de uma árvore binária: Pré-ordem: lê nó, percorre sub-árvore esquerda, percorre sub-árvore direita (/ + a * b c d). Em-ordem: percorre sub-árvore esquerda, lê nó, percorre sub-árvore direita (a + b * c / d). Pós-ordem: percorre sub-árvore esquerda, percorre sub-árvore direita, lê nó (a b c * + d /). a b c * + / d UDESC – Prof. Kariston Pereira

22 Travessia em Árvores Binárias
void pre_ordem(node *n) { if (n != null) processa_info(n->info); pre_ordem(n->left); pre_ordem(n->right); } void em_ordem(node *n) { if (n != null) em_ordem(n->left); processa_info(n->info); em_ordem(n->right); } void pos_ordem(node *n) { if (n != null) pos_ordem(n->left); pos_ordem(n->right); processa_info(n->info); } UDESC – Prof. Kariston Pereira

23 Aplicações Árvores Binárias
Representação de expressões. Algoritmos de Ordenação (HeapSort). Busca (Árvores Binárias de Busca/Pesquisa). UDESC – Prof. Kariston Pereira

24 UDESC – Prof. Kariston Pereira
Exercícios Criar uma Árvore Binária, Incluir alguns dados e Implementar os algoritmos de travessia/caminhamento apresentados: Pré-Ordem; Em Ordem; Pós-Ordem. UDESC – Prof. Kariston Pereira


Carregar ppt "Introdução a Árvores e Árvores Binárias"

Apresentações semelhantes


Anúncios Google