ESTRUTURAS DE DADOS E ALGORITMOS ÁRVORE BINÁRIA

Documentos relacionados
Exemplo Árvore Binária

ESTRUTURAS DE DADOS E ALGORITMOS LISTA LIGADA (ABORDAGEM RECURSIVA)

ESTRUTURAS DE DADOS E ALGORITMOS LISTA LIGADA

Árvores e Mapas. Luís Lopes. Estruturas de Dados DCC-FCUP

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

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

Árvores. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo

Árvores & Árvores Binárias

DAINF - Departamento de Informática

Árvores. Prof. Byron Leite Prof. Tiago Massoni Prof. Fernando Buarque. Engenharia da Computação. Poli - UPE

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

Árvores Binárias. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich

GGI026 - Árvore rubro-negra - Remoção

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

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

UNIVERSIDADE DE SÃO PAULO ICMC SCC 202 Algoritmos e Estrutura de Dados I - 2º Semestre 2010 Profa. Sandra Maria Aluísio;

Árvores. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira

PAA-DCC-UFAM. Árvores. Universidade Federal do Amazonas Departamento de Eletrônica e Computação

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

Algoritmos e Estrutura de Dados II. Árvore. Prof a Karina Oliveira.

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

SUMÁRIO. Fundamentos Árvores Binárias Árvores Binárias de Busca

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

Aula T13 BCC202 Árvores. Túlio Toffolo

Pesquisa em memória primária

Programação II. Árvores Binárias (Binary Trees) Bruno Feijó Dept. de Informática, PUC-Rio

Árvores Binárias de Busca

ESTRUTURA DE DADOS. Árvores, árvores binárias e percursos. Cristina Boeres

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

Árvores Binárias de Busca

Árvores binárias de busca

Exercícios: Árvores. Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de estrutura de dados em linguagem C

Árvores. Estruturas de Dados. Prof. Vilson Heck Junior

Árvores Binárias Balanceadas Estrutura de Dados I

8. Árvores. Fernando Silva DCC-FCUP. Estruturas de Dados. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38

8. Árvores. Fernando Silva. Estruturas de Dados DCC-FCUP. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38

INF1010 Lista de Exercícios 2

Árvores Binárias. Algoritmos e Estruturas de Dados Flavio Figueiredo (

Introdução a AVL: teoria e prática. 22/11, 25/11 e 30/11

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

Estruturas de Dados II

Árvores de Pesquisa. A árvore de pesquisa é uma estrutura de dados muito eficiente para armazenar informação.

Árvores AVL e Árvores B. Jeane Melo

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

ÁRVORE BINÁRIA DE BUSCA TDA-ABB

Árvores binárias de busca

ÁRVORE AVL. Problema do balanceamento

Á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

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

Árvores Binárias. 9/11 e 11/11 Conceitos Representação e Implementação

Árvores Binárias. 16/11 Representação e Implementação: Encadeada Dinâmica O TAD

ÁRVORE BINÁRIA DE BUSCA

Conceitos gerais Terminologia Forma de Representação de Árvores Árvores Binárias

Árvores. N-árias, Binárias, Busca. Vanessa Maia Berny Mestrado em Ciência da Computação

Prova 2 PMR3201 1o. semestre 2015 Prof. Thiago Martins

Árvores Binárias de Busca

Árvores. Prof. César Melo ICOMP/UFAM

Algoritmos e Estrutura de Dados II. Árvore AVL. Prof a Karina Oliveira. Fonte: Prof a Ana Eliza

Fontes Bibliográficas. Estruturas de Dados Aula 15: Árvores. Livros:

Heaps. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35

Transcrição:

ESTRUTURAS DE DADOS E ALGORITMOS 1 ÁRVORE BINÁRIA Adalberto Cajueiro Departamento de Sistemas e Computação Universidade Federal de Campina Grande

ÁRVORE (EXEMPLO) Como seria pesquisar a localização de um arquivo no sistema de arquivos se não tivéssemos diretórios? Para entradas realmente grandes, o acesso linear é proibitivo! Precisamos de alguma estrutura nao-linear de acesso mais eficiente. 2

ÁRVORE Estrutura não-linear com tempo de acesso em média O(log n). Coleção de nós em hierarquia Vazia ou Raiz (root) e zero ou mais subárvores Raiz da subárvore é um nó filho do nó raiz A raiz de uma árvore é unica! Não possui ciclos N nós, N-1 arestas 3

ÁRVORE (ILUSTRACAO) raiz root raiz... 4

ÁRVORE (ILUSTRACAO) raiz... folha (leaf) 5

ÁRVORE raiz Nível 0 6 Nível 1... Nível k Nível k + 1 Altura = k+1

ÁRVORE Uma árvore binária é uma estrutura de dados caracterizada por: Ou não tem elemento algum (árvore vazia) Ou tem um elemento distinto, denominado raiz, com duas referencias para duas estruturas diferentes, denominadas sub-árvore (filho) esquerda e sub-árvore (filho) direita Cada nó pode ter grau: 0, 1 ou 2 7

ÁRVORE A ligação entre os nós são vistas como apontadores direcionados do pai para os filhos. Por questoes de implementação apontadores podem existir também referêcias dos filhos para o pai O numero de filhos por nó diferenciam os vários tipos de arvores existentes. Cada nó da árvore encontra-se em determinado nível. A raiz encontra-se no nível zero. Propriedade fundamental: só existe um caminho da raiz para um outro nó da árvore. Altura de uma árvore: comprimento do caminho mais longo da raiz até as folhas 8

ÁRVORE (APLICABILIDADE) Representacao de expressoes aritméticas 5*3 + 4/2 + * / 5 3 4 2 9

EXERCÍCIO Qual a profundidade do nó 6? Qual a altura da árvore? Os nós 6 e 9 estão no mesmo nível? e 7 e 11? Qual o grau do nó 7? E de 9? E de 4? 10

ÁRVORES ESTRITAMENTE BINÁRIAS Cada nó possui grau 0 ou 2 Quantos nós terá uma AEB com n folhas? 7 4 6 Desenhe diversas arvores e tente deduzir. 9 1 3 2 11

EXERCÍCIO A árvore a seguir é estritamente binária? Justifique. 12

ÁRVORE BINÁRIA COMPLETA Todos os níveis são completos (folhas estão no mesmo nível) Qual a relacao que existe entre a altura de uma árvore binária completa e o número de elementos em cada nível? Qual a relacao que existe entre a altura de uma árvore binária completa e o número de elementos no total? nível 0 nos:1 total:1 nível 1 nos:2 total:3 nível 2 nos:4 total:7 nível 3 nos:8 total:15 13

ÁRVORE BINÁRIA COMPLETA Todos os níveis são completos (folhas estão no mesmo nível) Qual a relacao que existe entre a altura de uma árvore binária completa e o número de elementos em cada nível? Qual a relacao que existe entre a altura de uma árvore binária completa e o número de elementos no total? nível 0 nos:1 total:1 nível 1 nos:2 total:3 nível 2 nos:4 total:7 nível 3 nos:8 total:15 h 2 h 2 h+1-1 14

ÁRVORES BINÁRIAS (PERCURSOS) Formas de percurso em árvore binárias: Pré-ordem (RAIZ, ESQ, DIR) Visita raiz Percorre sub-árvore esquerda em pré-ordem Percorre sub-árvore direita em pré-ordem Em-ordem (simétrica) (ESQ, RAIZ, DIR) Percorre sub-árvore esquerda em ordem simétrica Visita raiz Percorre sub-árvore direita em ordem simétrica Pós-ordem (ESQ, DIR, RAIZ) Percorre sub-árvore esquerda em pós-ordem Percorre sub-árvore direita em pós-ordem Visita raiz Applet: http://www.cosc.canterbury.ac.nz/mukundan/dsal/btree.html 15

ARVORES BINÁRIAS Impressão em pré-ordem (R,E,D): 8 4 12 2 6 10 14 1 3 5 7 9 11 13 15 16

ARVORES BINÁRIAS Impressão em pré-ordem: 8 8 4 12 2 6 10 14 1 3 5 7 9 11 13 15 17

ARVORES BINÁRIAS Impressão em pré-ordem: 8 8,4 4 12 2 6 10 14 1 3 5 7 9 11 13 15 18

ARVORES BINÁRIAS Impressão em pré-ordem: 8 8,4,2 4 12 2 6 10 14 1 3 5 7 9 11 13 15 19

ARVORES BINÁRIAS Impressão em pré-ordem: 8 8,4,2,1 4 12 2 6 10 14 1 3 5 7 9 11 13 15 20

ARVORES BINÁRIAS Impressão em pré-ordem: 8 8,4,2,1,3 4 12 2 6 10 14 1 3 5 7 9 11 13 15 21

ARVORES BINÁRIAS Impressão em pré-ordem: 8 8,4,2,1,3,6 4 12 2 6 10 14 1 3 5 7 9 11 13 15 22

ARVORES BINÁRIAS Impressão em pré-ordem: 8 8,4,2,1,3,6,5 4 12 2 6 10 14 1 3 5 7 9 11 13 15 23

ARVORES BINÁRIAS Impressão em pré-ordem: 8 8,4,2,1,3,6,5,7 4 12 2 6 10 14 1 3 5 7 9 11 13 15 24

ARVORES BINÁRIAS Impressão em pré-ordem: 8 8,4,2,1,3,6,5,7, 12 4 12 2 6 10 14 1 3 5 7 9 11 13 15 25

ARVORES BINÁRIAS Impressão em pré-ordem: 8 8,4,2,1,3,6,5,7, 12,10 4 12 2 6 10 14 1 3 5 7 9 11 13 15 26

ARVORES BINÁRIAS Impressão em pré-ordem: 8 8,4,2,1,3,6,5,7, 12,10,9 4 12 2 6 10 14 1 3 5 7 9 11 13 15 27

ARVORES BINÁRIAS Impressão em pré-ordem: 8 8,4,2,1,3,6,5,7, 12,10,9,11 4 12 2 6 10 14 1 3 5 7 9 11 13 15 28

ARVORES BINÁRIAS Impressão em pré-ordem: 8 8,4,2,1,3,6,5,7, 12,10,9,11,14 4 12 2 6 10 14 1 3 5 7 9 11 13 15 29

ARVORES BINÁRIAS Impressão em pré-ordem: 8 8,4,2,1,3,6,5,7, 12,10,9,11,14,13 4 12 2 6 10 14 1 3 5 7 9 11 13 15 30

EXERCÍCIO Qual a saída do caminhamento em pré ordem da árvore binária a seguir? 31

ARVORES BINÁRIAS Impressão em ordem simétrica (E,R,D): 8 1,2,3,4,5,6,7,8,9 10,11,12,13,14,15 4 12 2 6 10 14 1 3 5 7 9 11 13 15 32

EXERCÍCIO Qual a saída do percurso em ordem da árvore binária a seguir? 33

ARVORES BINÁRIAS Impressão em pós-ordem (E,D,R): 8 1,3,2,5,7,6,4,9,11,10 13,15,14,12,8 4 12 2 6 10 14 1 3 5 7 9 11 13 15 34

EXERCÍCIO Qual a saída do caminhamento em pós ordem da árvore binária a seguir? 35

ÁRVORE BINÁRIA (IMPLEMENTAÇÃO) De que é composta uma árvore binária? Como implementar uma árvore binária? 36

ÁRVORE BINÁRIA (IMPLEMENTAÇÃO) De que é composta uma árvore binária? Como implementar uma árvore binária? public class BTNode<T> { protected T data; protected BTNode<T> left; protected BTNode<T> right; protected BTNode<T> parent; public boolean isempty(){ return this.data == null; } } //getters, setters, equals, tostring 37

ÁRVORE BINÁRIA (IMPLEMENTAÇÃO) De que é composta uma árvore binária? Como implementar uma árvore binária? public interface BT<T> { public BTNode<T> getroot(); public boolean isempty(); public int height(); public BTNode<T> search(t elem); public void insert(t value); public void remove(t key); public T[] preorder(); public T[] order(); public T[] postorder(); public int size(); } 38

ÁRVORE BINÁRIA (IMPLEMENTAÇÃO) Como representar uma árvore vazia? null data = null null null O construtor default de BTNode já gera uma árvore vazia? 39

ÁRVORE BINÁRIA (IMPLEMENTAÇÃO) Como representar uma árvore vazia? null O nó sentilena de uma árvore binária não contem dados data = null = NIL null null O construtor default de BTNode já gera uma árvore vazia? 40

ÁRVORE BINÁRIA (IMPLEMENTAÇÃO) Como representar uma árvore contendo apenas um nó? null null data folha data folha null null NIL NIL null null null null 41

ÁRVORE BINÁRIA DE BUSCA Árvore binária de busca ou árvore binária de pesquisa é uma árvore binária onde todos os nós armazenam dados comparáveis todos nós da sub-árvore à esquerda contêm valores menores do que o nó raiz todos os nós da subárvore à direita contêm valores maiores do que o nó raiz. x < x > x A principal utilização de árvores binárias são as árvores binária de busca 42

EXEMPLO 2 Subárvores < > < > > O quanto isso reduz o espaço da busca a cada passo? 43

ÁRVORE BINÁRIA DE BUSCA (IMPLEMENTAÇÃO) Uma BST é uma BT? Como implementar isso em Java? 44

ÁRVORE BINÁRIA DE BUSCA (IMPLEMENTAÇÃO) Uma BST é uma BT? Como implementar isso em Java? public class BSTNode<T extends Comparable<T>> extends BTNode<T> { } 45

ÁRVORE BINÁRIA DE BUSCA (IMPLEMENTAÇÃO) Uma BST é uma BT? Como implementar isso em Java? public interface BST<T extends Comparable<T>> extends BT<T> { public BTNode<T> maximum(); public BTNode<T> minimum(); public BTNode<T> successor(btnode<t> node); public BTNode<T> predecessor(btnode<t> node); } 46

PESQUISA BINÁRIA Como saber se um dado/valor/chave está na árvore? Se o nó é vazio (caso base) Árvore vazia não contém dado algum Se o nó é não-vazio Verifica se o dado do nó é igual à chave dada Se nao for Se a chave dada for menor que o dado do nó, pesquisa na sub-árvore a esquerda Senao pesquise na sub-árvore a direita 47

PESQUISA BINÁRIA (IMPLEMENTACAO) Qual o custo da busca? 48

ÁRVORE DESBALANCEADA O que ocorre com a pesquisa binária se a árvore estiver desbalanceada? 42 < x x 88 > x 94 95 49

ÁRVORE DESBALANCEADA O que ocorre com a pesquisa binária se a árvore estiver desbalanceada? 42 < x x 88 O(n) > x 94 95 Solução: Outras árvores, como AVL, que veremos depois. 50

MINIMUM Como buscar o elemento mínimo de uma BST? Descer pela esquerda até que um NIL seja encontrado 51

MAXIMUM Como buscar o elemento máximo de uma BST? Descer pela direita até que um NIL seja encontrado 52

SUCESSOR Como buscar o sucessor de um elemento em uma BST? Sucessor é a menor das chaves maiores (menor descendente a direita) 53

SUCESSOR Como buscar o sucessor de um elemento em uma BST? Sucessor é a menor das chaves maiores (primeiro ascendente maior) 54

PREDECESSOR Como buscar o predecessor de um elemento em uma BST? Predecessor é a maior das chaves menores (maior descendente a esquerda). Simétrico ao sucessor Tree-Predecessor(x) if left[x]!= NIL then return Tree-Maximum(left[x]) y = p[x] while y!= NIL and x = left[y] do x = y y = p[y] return y 55

PREDECESSOR Como buscar o predecessor de um elemento em uma BST? Predecessor é a maior das chaves menores (primeiro ascendente maior). Simétrico ao sucessor Tree-Predecessor(x) if left[x]!= NIL then return Tree-Maximum(left[x]) y = p[x] while y!= NIL and x = left[y] do x = y y = p[y] return y 56

ÁRVORE BINÁRIA (INSERÇÃO) Acontece pela raiz (admitir elementos diferentes) Processar apenas chaves diferentes da raiz Se a chave for menor, insere no filho a esquerda Se a chave for maior insere no filho a direita Insercao sempre acontece em uma nova folha 57

EXERCÍCIO 1 Insira as chaves 46, 47, 44, 45 58

EXERCÍCIO 1 Insira as chaves 46, 47, 44, 45 46 59

EXERCÍCIO 1 Insira as chaves 46, 47, 44, 45 46 47 60

EXERCÍCIO 1 Insira as chaves 46, 47, 44, 45 46 44 47 61

EXERCÍCIO 1 Insira as chaves 46, 47, 44, 45 46 44 47 45 62

ÁRVORE BINÁRIA (INSERCAO) Recursivo Tree-insert(BSTNode node, T element){ if(node=nil){ node.data = element node.left = NIL node.right = NIL }else{ if(element< node.data){ Tree-insert(node.left, element) }else if (element > node.data){ Tree-insert (node.right, element) } } } Qual o custo? 63

ARVORES BINÁRIAS (REMOCAO) Remocoes em arvores binarias: Se o nó y (a ser removido) for uma folha entao remova-o. Se o nó y tem apenas um filho, então ligamos o pai de y ao filho de y Se tem dois filhos então traz o sucessor de y para o lugar dele e remove o sucessor 12 12 10 14 10 15 9 11 13 15 9 11 13 64

ARVORES BINÁRIAS (REMOCAO) Outras abordagens trabalham da seguinte forma: Se for folha remove Senao sobe o menor descendente a direita (sucessor) Se nao existir menor descendente a direita então sobe o maior descendente a esquerda (predecessor) Remove recursivamente o nó movido. 65

ARVORES BINÁRIAS (REMOCAO) remover 20 66

ARVORES BINÁRIAS (REMOCAO) 67

ARVORES BINÁRIAS (REMOCAO) remover 30 68

ARVORES BINÁRIAS (REMOCAO) remover 30 40 69

ARVORES BINÁRIAS (REMOCAO) remover 50 40 70

ARVORES BINÁRIAS (REMOCAO) 90 remover 90 40 71

ARVORES BINÁRIAS (REMOCAO) 90 40 100 72

Tree-remove(value) { BSTNode node = search(value) if(node!= NIL){ if(node is leaf){ ÁRVORE BINÁRIA (REMOCAO) } } node = NIL }else if (node has one child){ if node!= root if(node is left child){ if(node.left!= NIL) node.left is left child of node.parent else node.right is left child of node.parent else //node is right child if(node.left!= NIL) node.left is right child of parent else node.right is right child of parent else root = not NIL child of root }else{ BSTNode sucessor = sucessor(node); node.data = sucessor.data; Tree-remove(sucessor); } 73

ÁRVORE BINÁRIA (PERCURSO) Algoritmo do percurso em pre-ordem 8 4 12 2 6 10 14 1 3 5 7 9 11 13 15 Como seria o algoritmo? 74

ÁRVORE BINÁRIA (PERCURSO) Algoritmo do percurso em pre-ordem preorder(bstnode node){ if(node!= NIL){ visit(node); preorder(node.left); preorder(node.right); } } visit(bstnode){ print(node.key); } Poderia fazer qualquer outro processamento 75

ÁRVORE BINÁRIA (PERCURSO) Algoritmo do percurso em ordem 8 4 12 2 6 10 14 1 3 5 7 9 11 13 15 Como seria o algoritmo? 76

ÁRVORE BINÁRIA (PERCURSO) Algoritmo do percurso em ordem order(bstnode node){ if(node!= NIL){ order(node.left); visit(node); order(node.right); } } 77

ÁRVORE BINÁRIA (PERCURSO) Algoritmo do percurso em pós-ordem 8 4 12 2 6 10 14 1 3 5 7 9 11 13 15 Como seria o algoritmo? 78

ÁRVORE BINÁRIA (PERCURSO) Algoritmo do percurso em pós-ordem postorder(bstnode node){ if(node!= NIL){ postorder(node.left); postorder(node.right); visit(node); } } 79

ÁRVORE BINÁRIA Como seria para calcular recursivamente o tamanho (quantidade de elementos) de uma árvore binária 1 size(root) = 1 + size(left) + size(right) size size 80

ÁRVORE BINÁRIA Como seria para calcular recursivamente o tamanho (quantidade de elementos) de uma árvore binária int size(){ return size(root) } int size(bstnode node){ if(node.isempty) return 0 else return 1 + size(node.left) + size(node.right) } 81

POSCOMP 2009 Nao necessariamente balanceada! 82

POSCOMP 2009 83

POSCOMP 2009 84

POSCOMP 2009 85

REFERÊNCIAS Capítulo 13 86