Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -

Slides:



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

Árvores Passeios.
Listas Lineares Estrutura que permite representar um conjunto de dados de forma a preservar a relação de ordem linear. Uma lista linear é composta de nós,
Aula 10 Algoritmos de Busca
Estruturas de Dados Árvores Binárias
Listas encadeadas Prof. Rosana Palazon.
ADT – Arvore Binária de Pesquisa
Estrutura de Dados e Algoritmos e Programação e Computadores II
Algoritmos BUSCA E INSERÇÃO
Padrão de Projeto Iterator
Série de Exercícios.

David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Pesquisa em Árvores Digitais
David Menotti Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária – Árvores de Busca
Pesquisa em Memória Primária – Árvores de Busca
Pesquisa em Memória Primária
André Lopes Pereira Luiz Carlos Barboza Júnior
Árvores Introdução e Aplicações Árvores de Busca Binária Fundamentos
Estrutura de Dados (Mapas)
Slides: Prof. João Fabro UTFPR - Curitiba
Listas Encadeadas.
Prof. Ernesto Lindstaedt
Universidade do Vale do Rio dos Sinos - São Leopoldo -
Algoritmos e Estruturas de Dados II
Pesquisa em Memória Primária
INF 1010 Estruturas de Dados Avançadas
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.
Árvores Binárias de Pesquisa
Heap Sort TPA – Prof. Mateus Costa
Lista Encadeada Circular Lista Duplamente Encadeada
Algorítmos e estrutura de dados III Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Métodos de Ordenação e Busca
1. Se este nó é raiz de uma árvore QuasiEquilibrada de ordem k, e
ÁRVORES PATRÍCIA UNIVERSIDADE CATÓLICA DE PELOTAS
Programação II Laboratório II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo - Transparências baseadas nos originais da Prof.
Orientação a Objetos e Java Graduação em Ciência da Computação
© Copyright 2007 Algoritmos e Estruturas de Dados - Todos os direitos reservados Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto.
Árvore Binária de Busca
Listas Simplesmente Encadeadas
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Árvores Binárias Profa. Patrícia A. Jaques Luiz Gonzaga Jr
Estruturas de Dados Aula 15: Árvores
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Aula 10 Algoritmos de Busca
Prof. Hilton Cardoso Marins Junior ÁRVORES BINÁRIAS.
Universidade do Vale do Rio dos Sinos - São Leopoldo -
Prof. Hilton Cardoso Marins Junior
Universidade do Vale do Rio dos Sinos - São Leopoldo -
Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos.
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo - Transparências baseadas nos originais da profa. Patrícia Jaques.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo - Transparências baseadas nos originais da profa. Renata Galante.
1 TAD Fila com Prioridade -FCP ATAI. 2 TAD Fila com Prioridade (Priority Queue) TAD Fila com Prioridade armazena uma colecção de elementos com prioridade.
Introdução a Árvores e Árvores Binárias
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Árvores Balanceadas (AVL)
Listas Duplamente Encadeadas Profs Prog2 e Lab2 Unisinos.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Implementação Orientada a Objetos – Aula 04 Métodos, parâmetros e retorno Prof. Danielle Martin/Marcia Bissaco Universidade de Mogi das Cruzes
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.
UNIVERSIDADE FEDERAL DE MINAS GERAIS Árvores Cristiano Arbex Valle Vinicius Fernandes dos Santos
Transcrição da apresentação:

Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -

Programação II – Prof. Mateus Raeder Árvores Binárias de Pesquisa Conhecida também como: –Árvore binária ordenada –Árvore binária de busca Apresenta relação de ordem entre os nodos Ordem definida através do campo chamado chave Chaves duplicadas não são permitidas –Cada nó possui uma chave única na árvore ! CHAVE

Programação II – Prof. Mateus Raeder Árvores Binárias de Pesquisa Não há chaves duplicadas!!! FILHO DA ESQUERDA Valor da chave MENOR que a chave do pai FILHO DA DIREITA Valor da chave MAIOR que a chave do pai Raiz

Programação II – Prof. Mateus Raeder Árvores Binárias de Pesquisa Crie árvores inserindo os seguintes nós (em ordem): –a) 57, 22, 10, 60, 88, 15, 0, 22 –b) j, x, o, m, z, a, j, h, i a) b) j x zo m a h i

Programação II – Prof. Mateus Raeder Classe Nodo Binário public class BSTNode { protected int key; protected BSTNode left, right; public BSTNode () { left = right = null; } public BSTNode (int num) { this(num,null,null); } public BSTNode (int num, BSTNode lt, BSTNode rt) { this.key = num; left = lt; right = rt; } public int getKey() { return key; } public void setKey(int key) { this.key = key; }

Programação II – Prof. Mateus Raeder Classe Nodo Binário public BSTNode getLeft() { return left; } public void setLeft(BSTNode left) { this.left = left; } public BSTNode getRight() { return right; } public void setRight(BSTNode right) { this.right = right; } }

Programação II – Prof. Mateus Raeder Classe Árvore Binária de Pesquisa public class BST { private BSTNode root = null; public BST () { } public void clear () { root = null; } public boolean isEmpty () { return root == null; } public BSTNode getRootNode (){ return root; }

Programação II – Prof. Mateus Raeder Busca de valor A procura de um valor em uma árvore binária é mais rápida do que em listas ou vetores. Como funciona: –Para cada nó, compare a chave a ser localizada com o valor armazenado no nó correntemente apontado Se a chave for menor, vá para a sub-árvore esquerda, e tente novamente Senão vá para a sub-árvore direita, e tente novamente –A busca para quando: For encontrado o nó Ou quando não há mais meios de continuar, pois a chave não está na árvore

Programação II – Prof. Mateus Raeder Busca de valor public BSTNode search (int el) { return search(root,el); } private BSTNode search (BSTNode p, int el) { while (p != null) { /* se valor procurado == chave do nó, retorna referência ao nó */ if (el==p.key) return p; /* se valor procurado < chave do nó, procurar na sub-árvore esquerda deste nó */ else if (el<p.key) p = p.left; /* se valor procurado > chave do nó, procurar na sub-árvore direita deste nó */ else p = p.right; } // caso chave não foi achada, retorna null return null; }

Programação II – Prof. Mateus Raeder Exemplo de busca de valor el = 11 public BSTNode search (int el) { return search(root,el); } private BSTNode search (BSTNode p, int el) { while (p != null) { if (el==p.key) return p; else if (el<p.key) p = p.left; else p = p.right; } return null; } p

Programação II – Prof. Mateus Raeder Exemplo de busca de valor el = 11 public BSTNode search (int el) { return search(root,el); } private BSTNode search (BSTNode p, int el) { while (p != null) { if (el==p.key) return p; else if (el<p.key) p = p.left; else p = p.right; } return null; } p

Programação II – Prof. Mateus Raeder Exemplo de busca de valor el = 11 public BSTNode search (int el) { return search(root,el); } private BSTNode search (BSTNode p, int el) { while (p != null) { if (el==p.key) return p; else if (el<p.key) p = p.left; else p = p.right; } return null; } p

Programação II – Prof. Mateus Raeder Exemplo de busca de valor el = 11 public BSTNode search (int el) { return search(root,el); } private BSTNode search (BSTNode p, int el) { while (p != null) { if (el==p.key) return p; else if (el<p.key) p = p.left; else p = p.right; } return null; } p

Programação II – Prof. Mateus Raeder Exemplo de busca de valor el = 11 public BSTNode search (int el) { return search(root,el); } private BSTNode search (BSTNode p, int el) { while (p != null) { if (el==p.key) return p; else if (el<p.key) p = p.left; else p = p.right; } return null; } p

Programação II – Prof. Mateus Raeder Exemplo de busca de valor el = 11 public BSTNode search (int el) { return search(root,el); } private BSTNode search (BSTNode p, int el) { while (p != null) { if (el==p.key) return p; else if (el<p.key) p = p.left; else p = p.right; } return null; } p

Programação II – Prof. Mateus Raeder Exemplo de busca de valor el = 11 public BSTNode search (int el) { return search(root,el); } private BSTNode search (BSTNode p, int el) { while (p != null) { if (el==p.key) return p; else if (el<p.key) p = p.left; else p = p.right; } return null; } p

Programação II – Prof. Mateus Raeder Exemplo de busca de valor el = 11 public BSTNode search (int el) { return search(root,el); } private BSTNode search (BSTNode p, int el) { while (p != null) { if (el==p.key) return p; else if (el<p.key) p = p.left; else p = p.right; } return null; } p

Programação II – Prof. Mateus Raeder Exemplo de busca de valor el = 11 public BSTNode search (int el) { return search(root,el); } private BSTNode search (BSTNode p, int el) { while (p != null) { if (el==p.key) return p; else if (el<p.key) p = p.left; else p = p.right; } return null; } p

Programação II – Prof. Mateus Raeder Exemplo de busca de valor el = 11 public BSTNode search (int el) { return search(root,el); } private BSTNode search (BSTNode p, int el) { while (p != null) { if (el==p.key) return p; else if (el<p.key) p = p.left; else p = p.right; } return null; } p

Programação II – Prof. Mateus Raeder Exemplo de busca de valor el = 11 public BSTNode search (int el) { return search(root,el); } private BSTNode search (BSTNode p, int el) { while (p != null) { if (el==p.key) return p; else if (el<p.key) p = p.left; else p = p.right; } return null; } p

Programação II – Prof. Mateus Raeder Exemplo de busca de valor el = 11 public BSTNode search (int el) { return search(root,el); } private BSTNode search (BSTNode p, int el) { while (p != null) { if (el==p.key) return p; else if (el<p.key) p = p.left; else p = p.right; } return null; } p

Programação II – Prof. Mateus Raeder Exemplo de busca de valor el = 11 public BSTNode search (int el) { return search(root,el); } private BSTNode search (BSTNode p, int el) { while (p != null) { if (el==p.key) return p; else if (el<p.key) p = p.left; else p = p.right; } return null; } p

Programação II – Prof. Mateus Raeder Exemplo de busca de valor el = 11 public BSTNode search (int el) { return search(root,el); } private BSTNode search (BSTNode p, int el) { while (p != null) { if (el==p.key) return p; else if (el<p.key) p = p.left; else p = p.right; } return null; } p

Programação II – Prof. Mateus Raeder Inserindo uma nova chave public boolean insert (int el) { BSTNode p = root, prev = null; // caso o valor já exista na árvore, não inserir e retornar false if (search(el)!=null) return false; // procurando um lugar para colocar o novo nó while (p != null) { prev = p; if (el<p.key) p = p.left; else p = p.right; } // se árvore vazia if (root == null) root = new BSTNode(el); else if (prev.key<el) prev.right = new BSTNode(el); else prev.left = new BSTNode(el); return true; }

Programação II – Prof. Mateus Raeder Exemplo de inserção public boolean insert (int el) { BSTNode p = root, prev = null; if (search(el)!=null) return false; while (p != null) { prev = p; if (el<p.key) p = p.left; else p = p.right; } if (root == null) root = new BSTNode(el); else if (prev.key<el) prev.right = new BSTNode(el); else prev.left = new BSTNode(el); return true; } el = 20 p prev

Programação II – Prof. Mateus Raeder Exemplo de inserção public boolean insert (int el) { BSTNode p = root, prev = null; if (search(el)!=null) return false; while (p != null) { prev = p; if (el<p.key) p = p.left; else p = p.right; } if (root == null) root = new BSTNode(el); else if (prev.key<el) prev.right = new BSTNode(el); else prev.left = new BSTNode(el); return true; } el = 20 p prev

Programação II – Prof. Mateus Raeder Exemplo de inserção public boolean insert (int el) { BSTNode p = root, prev = null; if (search(el)!=null) return false; while (p != null) { prev = p; if (el<p.key) p = p.left; else p = p.right; } if (root == null) root = new BSTNode(el); else if (prev.key<el) prev.right = new BSTNode(el); else prev.left = new BSTNode(el); return true; } el = 20 p prev

Programação II – Prof. Mateus Raeder Exemplo de inserção public boolean insert (int el) { BSTNode p = root, prev = null; if (search(el)!=null) return false; while (p != null) { prev = p; if (el<p.key) p = p.left; else p = p.right; } if (root == null) root = new BSTNode(el); else if (prev.key<el) prev.right = new BSTNode(el); else prev.left = new BSTNode(el); return true; } el = 20 p prev 20

Programação II – Prof. Mateus Raeder Exemplo de inserção public boolean insert (int el) { BSTNode p = root, prev = null; if (search(el)!=null) return false; while (p != null) { prev = p; if (el<p.key) p = p.left; else p = p.right; } if (root == null) root = new BSTNode(el); else if (prev.key<el) prev.right = new BSTNode(el); else prev.left = new BSTNode(el); return true; } el = 20 p prev 20

Programação II – Prof. Mateus Raeder Exemplo de inserção public boolean insert (int el) { BSTNode p = root, prev = null; if (search(el)!=null) return false; while (p != null) { prev = p; if (el<p.key) p = p.left; else p = p.right; } if (root == null) root = new BSTNode(el); else if (prev.key<el) prev.right = new BSTNode(el); else prev.left = new BSTNode(el); return true; } el = 23 20

Programação II – Prof. Mateus Raeder Exemplo de inserção public boolean insert (int el) { BSTNode p = root, prev = null; if (search(el)!=null) return false; while (p != null) { prev = p; if (el<p.key) p = p.left; else p = p.right; } if (root == null) root = new BSTNode(el); else if (prev.key<el) prev.right = new BSTNode(el); else prev.left = new BSTNode(el); return true; } el = 23 p prev 20

Programação II – Prof. Mateus Raeder Exemplo de inserção public boolean insert (int el) { BSTNode p = root, prev = null; if (search(el)!=null) return false; while (p != null) { prev = p; if (el<p.key) p = p.left; else p = p.right; } if (root == null) root = new BSTNode(el); else if (prev.key<el) prev.right = new BSTNode(el); else prev.left = new BSTNode(el); return true; } el = 23 p prev 20

Programação II – Prof. Mateus Raeder Exemplo de inserção public boolean insert (int el) { BSTNode p = root, prev = null; if (search(el)!=null) return false; while (p != null) { prev = p; if (el<p.key) p = p.left; else p = p.right; } if (root == null) root = new BSTNode(el); else if (prev.key<el) prev.right = new BSTNode(el); else prev.left = new BSTNode(el); return true; } el = 23 p prev 20

Programação II – Prof. Mateus Raeder Exemplo de inserção public boolean insert (int el) { BSTNode p = root, prev = null; if (search(el)!=null) return false; while (p != null) { prev = p; if (el<p.key) p = p.left; else p = p.right; } if (root == null) root = new BSTNode(el); else if (prev.key<el) prev.right = new BSTNode(el); else prev.left = new BSTNode(el); return true; } el = 23 p prev 20

Programação II – Prof. Mateus Raeder Exemplo de inserção public boolean insert (int el) { BSTNode p = root, prev = null; if (search(el)!=null) return false; while (p != null) { prev = p; if (el<p.key) p = p.left; else p = p.right; } if (root == null) root = new BSTNode(el); else if (prev.key<el) prev.right = new BSTNode(el); else prev.left = new BSTNode(el); return true; } el = 23 p prev 20

Programação II – Prof. Mateus Raeder Exemplo de inserção public boolean insert (int el) { BSTNode p = root, prev = null; if (search(el)!=null) return false; while (p != null) { prev = p; if (el<p.key) p = p.left; else p = p.right; } if (root == null) root = new BSTNode(el); else if (prev.key<el) prev.right = new BSTNode(el); else prev.left = new BSTNode(el); return true; } el = 23 p prev 20

Programação II – Prof. Mateus Raeder Exemplo de inserção public boolean insert (int el) { BSTNode p = root, prev = null; if (search(el)!=null) return false; while (p != null) { prev = p; if (el<p.key) p = p.left; else p = p.right; } if (root == null) root = new BSTNode(el); else if (prev.key<el) prev.right = new BSTNode(el); else prev.left = new BSTNode(el); return true; } el = 23 p prev 20

Programação II – Prof. Mateus Raeder Exemplo de inserção public boolean insert (int el) { BSTNode p = root, prev = null; if (search(el)!=null) return false; while (p != null) { prev = p; if (el<p.key) p = p.left; else p = p.right; } if (root == null) root = new BSTNode(el); else if (prev.key<el) prev.right = new BSTNode(el); else prev.left = new BSTNode(el); return true; } el = 23 p prev 20

Programação II – Prof. Mateus Raeder Exemplo de inserção public boolean insert (int el) { BSTNode p = root, prev = null; if (search(el)!=null) return false; while (p != null) { prev = p; if (el<p.key) p = p.left; else p = p.right; } if (root == null) root = new BSTNode(el); else if (prev.key<el) prev.right = new BSTNode(el); else prev.left = new BSTNode(el); return true; } el = 23 p prev 20 23

Programação II – Prof. Mateus Raeder Exemplo de inserção public boolean insert (int el) { BSTNode p = root, prev = null; if (search(el)!=null) return false; while (p != null) { prev = p; if (el<p.key) p = p.left; else p = p.right; } if (root == null) root = new BSTNode(el); else if (prev.key<el) prev.right = new BSTNode(el); else prev.left = new BSTNode(el); return true; } el = 23 p prev 20 23

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa É o processo de visitar cada nó da árvore exatamente uma vez. O percurso pode ser interpretado como colocar todos os nós em uma linha ou a linearização da árvore. Os percursos podem ser em extensão ou em profundidade. – Percursos em extensão : visitam todos os nós de cada nível, nível por nível (indo do mais alto ao mais baixo, ou vice-versa). – Percursos em profundidade : percorre os caminhos das árvores. Percorre primeiramente todo o caminho mais a esquerda, e assim por diante. Visitar : Fazer algo com o nó como exibi-lo, gravá-lo, etc.

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: IN-ORDEM (esquerda-raiz-direita): - percorre a sub-árvore esquerda; - visita o nó; - percorre a sub-árvore direita. PRÉ-ORDEM (raiz-esquerda-direita): - visita o nó; - percorre a sub-árvore esquerda; - percorre a sub-árvore direita; PÓS-ORDEM (esquerda-direita- raiz): - percorre a sub-árvore esquerda; - percorre a sub-árvore direita; - visita o nó;  Notação polonesa pós-fixada  Notação polonesa pré-fixada  Forma original (infixada)

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são:  Notação polonesa pré-fixada * 37 / PRÉ-ORDEM (raiz-esquerda-direita): - visita o nó; - percorre a sub-árvore esquerda; - percorre a sub-árvore direita;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são:  Notação polonesa pré-fixada * 37 / - Visita o nó + PRÉ-ORDEM (raiz-esquerda-direita): - visita o nó; - percorre a sub-árvore esquerda; - percorre a sub-árvore direita;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são:  Notação polonesa pré-fixada * 37 / - Visita o nó - Percorre esquerda + - Visita o nó PRÉ-ORDEM (raiz-esquerda-direita): - visita o nó; - percorre a sub-árvore esquerda; - percorre a sub-árvore direita;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são:  Notação polonesa pré-fixada * 37 / - Visita o nó - Percorre esquerda + * - Visita o nó - Percorre esquerda - Visita o nó PRÉ-ORDEM (raiz-esquerda-direita): - visita o nó; - percorre a sub-árvore esquerda; - percorre a sub-árvore direita;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são:  Notação polonesa pré-fixada * 37 / - Visita o nó - Percorre esquerda + * 3 - Visita o nó - Percorre esquerda - Visita o nó - Percorre esquerda - Percorre direita PRÉ-ORDEM (raiz-esquerda-direita): - visita o nó; - percorre a sub-árvore esquerda; - percorre a sub-árvore direita;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são:  Notação polonesa pré-fixada * 37 / - Visita o nó - Percorre esquerda + * 3 - Visita o nó - Percorre esquerda - Percorre direita - Visita o nó PRÉ-ORDEM (raiz-esquerda-direita): - visita o nó; - percorre a sub-árvore esquerda; - percorre a sub-árvore direita;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são:  Notação polonesa pré-fixada * 37 / - Visita o nó - Percorre esquerda + * Visita o nó - Percorre esquerda - Percorre direita - Visita o nó - Percorre esquerda - Percorre direita PRÉ-ORDEM (raiz-esquerda-direita): - visita o nó; - percorre a sub-árvore esquerda; - percorre a sub-árvore direita;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são:  Notação polonesa pré-fixada * 37 / - Visita o nó - Percorre esquerda + * Visita o nó - Percorre esquerda - Percorre direita PRÉ-ORDEM (raiz-esquerda-direita): - visita o nó; - percorre a sub-árvore esquerda; - percorre a sub-árvore direita;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são:  Notação polonesa pré-fixada * 37 / - Visita o nó - Percorre esquerda + * 3 7 PRÉ-ORDEM (raiz-esquerda-direita): - visita o nó; - percorre a sub-árvore esquerda; - percorre a sub-árvore direita;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são:  Notação polonesa pré-fixada * 37 / - Visita o nó - Percorre esquerda - Percorre direita + * Visita o nó PRÉ-ORDEM (raiz-esquerda-direita): - visita o nó; - percorre a sub-árvore esquerda; - percorre a sub-árvore direita;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são:  Notação polonesa pré-fixada * 37 / - Visita o nó - Percorre esquerda - Percorre direita + * 3 7 / - Visita o nó - Percorre esquerda - Visita o nó PRÉ-ORDEM (raiz-esquerda-direita): - visita o nó; - percorre a sub-árvore esquerda; - percorre a sub-árvore direita;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são:  Notação polonesa pré-fixada * 37 / - Visita o nó - Percorre esquerda - Percorre direita + * 3 7 / 6 - Visita o nó - Percorre esquerda - Visita o nó - Percorre esquerda - Percorre direita PRÉ-ORDEM (raiz-esquerda-direita): - visita o nó; - percorre a sub-árvore esquerda; - percorre a sub-árvore direita;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são:  Notação polonesa pré-fixada * 37 / - Visita o nó - Percorre esquerda - Percorre direita + * 3 7 / 6 - Visita o nó - Percorre esquerda PRÉ-ORDEM (raiz-esquerda-direita): - visita o nó; - percorre a sub-árvore esquerda; - percorre a sub-árvore direita;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são:  Notação polonesa pré-fixada * 37 / - Visita o nó - Percorre esquerda - Percorre direita + * 3 7 / 6 - Visita o nó - Percorre esquerda - Percorre direita - Visita o nó PRÉ-ORDEM (raiz-esquerda-direita): - visita o nó; - percorre a sub-árvore esquerda; - percorre a sub-árvore direita;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são:  Notação polonesa pré-fixada * 37 / - Visita o nó - Percorre esquerda - Percorre direita + * 3 7 / Visita o nó - Percorre esquerda - Percorre direita - Visita o nó - Percorre esquerda - Percorre direita PRÉ-ORDEM (raiz-esquerda-direita): - visita o nó; - percorre a sub-árvore esquerda; - percorre a sub-árvore direita;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são:  Notação polonesa pré-fixada * 37 / - Visita o nó - Percorre esquerda - Percorre direita + * 3 7 / Visita o nó - Percorre esquerda - Percorre direita PRÉ-ORDEM (raiz-esquerda-direita): - visita o nó; - percorre a sub-árvore esquerda; - percorre a sub-árvore direita;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são:  Notação polonesa pré-fixada * 37 / - Visita o nó - Percorre esquerda - Percorre direita + * 3 7 / 6 10 PRÉ-ORDEM (raiz-esquerda-direita): - visita o nó; - percorre a sub-árvore esquerda; - percorre a sub-árvore direita;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são:  Notação polonesa pré-fixada * 37 / + * 3 7 / 6 10 Caminhamento em pré-ordem: PRÉ-ORDEM (raiz-esquerda-direita): - visita o nó; - percorre a sub-árvore esquerda; - percorre a sub-árvore direita;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda  Notação polonesa pós-fixada - Percorre esquerda PÓS-ORDEM (esquerda-direita- raiz): - percorre a sub-árvore esquerda; - percorre a sub-árvore direita; - visita o nó;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda  Notação polonesa pós-fixada - Percorre esquerda - Percorre direita PÓS-ORDEM (esquerda-direita- raiz): - percorre a sub-árvore esquerda; - percorre a sub-árvore direita; - visita o nó;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda  Notação polonesa pós-fixada - Percorre esquerda - Percorre direita - Visita o nó 3 PÓS-ORDEM (esquerda-direita- raiz): - percorre a sub-árvore esquerda; - percorre a sub-árvore direita; - visita o nó;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda  Notação polonesa pós-fixada - Percorre esquerda 3 PÓS-ORDEM (esquerda-direita- raiz): - percorre a sub-árvore esquerda; - percorre a sub-árvore direita; - visita o nó;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda  Notação polonesa pós-fixada - Percorre esquerda - Percorre direita 3 PÓS-ORDEM (esquerda-direita- raiz): - percorre a sub-árvore esquerda; - percorre a sub-árvore direita; - visita o nó;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda  Notação polonesa pós-fixada - Percorre esquerda - Percorre direita 3 - Percorre esquerda - Percorre direita PÓS-ORDEM (esquerda-direita- raiz): - percorre a sub-árvore esquerda; - percorre a sub-árvore direita; - visita o nó;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda  Notação polonesa pós-fixada - Percorre esquerda - Percorre direita Percorre esquerda - Percorre direita - Visita o nó PÓS-ORDEM (esquerda-direita- raiz): - percorre a sub-árvore esquerda; - percorre a sub-árvore direita; - visita o nó;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda  Notação polonesa pós-fixada - Percorre esquerda - Percorre direita 3 7 PÓS-ORDEM (esquerda-direita- raiz): - percorre a sub-árvore esquerda; - percorre a sub-árvore direita; - visita o nó;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda  Notação polonesa pós-fixada - Percorre esquerda - Percorre direita - Visita o nó 3 7 * PÓS-ORDEM (esquerda-direita- raiz): - percorre a sub-árvore esquerda; - percorre a sub-árvore direita; - visita o nó;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda  Notação polonesa pós-fixada 3 7 * PÓS-ORDEM (esquerda-direita- raiz): - percorre a sub-árvore esquerda; - percorre a sub-árvore direita; - visita o nó;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda - Percorre direita  Notação polonesa pós-fixada 3 7 * - Percorre esquerda - Percorre direita PÓS-ORDEM (esquerda-direita- raiz): - percorre a sub-árvore esquerda; - percorre a sub-árvore direita; - visita o nó;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda - Percorre direita  Notação polonesa pós-fixada 3 7 * 6 - Percorre esquerda - Percorre direita - Visita o nó PÓS-ORDEM (esquerda-direita- raiz): - percorre a sub-árvore esquerda; - percorre a sub-árvore direita; - visita o nó;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda - Percorre direita  Notação polonesa pós-fixada 3 7 * 6 - Percorre esquerda PÓS-ORDEM (esquerda-direita- raiz): - percorre a sub-árvore esquerda; - percorre a sub-árvore direita; - visita o nó;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda - Percorre direita  Notação polonesa pós-fixada 3 7 * 6 - Percorre esquerda - Percorre direita - Percorre esquerda - Percorre direita PÓS-ORDEM (esquerda-direita- raiz): - percorre a sub-árvore esquerda; - percorre a sub-árvore direita; - visita o nó;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda - Percorre direita  Notação polonesa pós-fixada 3 7 * Percorre esquerda - Percorre direita - Percorre esquerda - Percorre direita - Visita o nó PÓS-ORDEM (esquerda-direita- raiz): - percorre a sub-árvore esquerda; - percorre a sub-árvore direita; - visita o nó;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda - Percorre direita  Notação polonesa pós-fixada 3 7 * Percorre esquerda - Percorre direita PÓS-ORDEM (esquerda-direita- raiz): - percorre a sub-árvore esquerda; - percorre a sub-árvore direita; - visita o nó;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda - Percorre direita  Notação polonesa pós-fixada 3 7 * 6 10 / - Percorre esquerda - Percorre direita - Visita o nó PÓS-ORDEM (esquerda-direita- raiz): - percorre a sub-árvore esquerda; - percorre a sub-árvore direita; - visita o nó;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda - Percorre direita  Notação polonesa pós-fixada 3 7 * 6 10 / PÓS-ORDEM (esquerda-direita- raiz): - percorre a sub-árvore esquerda; - percorre a sub-árvore direita; - visita o nó;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda - Percorre direita - Visita o nó  Notação polonesa pós-fixada 3 7 * 6 10 / + PÓS-ORDEM (esquerda-direita- raiz): - percorre a sub-árvore esquerda; - percorre a sub-árvore direita; - visita o nó;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 /  Notação polonesa pós-fixada 3 7 * 6 10 / + Caminhamento em pós-ordem: PÓS-ORDEM (esquerda-direita- raiz): - percorre a sub-árvore esquerda; - percorre a sub-árvore direita; - visita o nó;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda  Forma original (infixada) - Percorre esquerda IN-ORDEM (esquerda-raiz-direita): - percorre a sub-árvore esquerda; - visita o nó; - percorre a sub-árvore direita.

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda  Forma original (infixada) - Percorre esquerda - Visita o nó 3 IN-ORDEM (esquerda-raiz-direita): - percorre a sub-árvore esquerda; - visita o nó; - percorre a sub-árvore direita.

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda  Forma original (infixada) - Percorre esquerda - Visita o nó - Percorre direita 3 IN-ORDEM (esquerda-raiz-direita): - percorre a sub-árvore esquerda; - visita o nó; - percorre a sub-árvore direita.

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda  Forma original (infixada) - Percorre esquerda 3 IN-ORDEM (esquerda-raiz-direita): - percorre a sub-árvore esquerda; - visita o nó; - percorre a sub-árvore direita.

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda  Forma original (infixada) - Percorre esquerda - Visita o nó 3 * IN-ORDEM (esquerda-raiz-direita): - percorre a sub-árvore esquerda; - visita o nó; - percorre a sub-árvore direita.

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda  Forma original (infixada) - Percorre esquerda - Visita o nó - Percorre direita 3 * - Percorre esquerda IN-ORDEM (esquerda-raiz-direita): - percorre a sub-árvore esquerda; - visita o nó; - percorre a sub-árvore direita.

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda  Forma original (infixada) - Percorre esquerda - Visita o nó - Percorre direita 3 * 7 - Percorre esquerda - Visita o nó IN-ORDEM (esquerda-raiz-direita): - percorre a sub-árvore esquerda; - visita o nó; - percorre a sub-árvore direita.

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda  Forma original (infixada) - Percorre esquerda - Visita o nó - Percorre direita 3 * 7 - Percorre esquerda - Visita o nó - Percorre direita IN-ORDEM (esquerda-raiz-direita): - percorre a sub-árvore esquerda; - visita o nó; - percorre a sub-árvore direita.

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda  Forma original (infixada) - Percorre esquerda - Visita o nó - Percorre direita 3 * 7 IN-ORDEM (esquerda-raiz-direita): - percorre a sub-árvore esquerda; - visita o nó; - percorre a sub-árvore direita.

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda  Forma original (infixada) 3 * 7 IN-ORDEM (esquerda-raiz-direita): - percorre a sub-árvore esquerda; - visita o nó; - percorre a sub-árvore direita.

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda - Visita o nó  Forma original (infixada) 3 * 7 + IN-ORDEM (esquerda-raiz-direita): - percorre a sub-árvore esquerda; - visita o nó; - percorre a sub-árvore direita.

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda - Visita o nó - Percorre direita  Forma original (infixada) 3 * Percorre esquerda IN-ORDEM (esquerda-raiz-direita): - percorre a sub-árvore esquerda; - visita o nó; - percorre a sub-árvore direita.

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda - Visita o nó - Percorre direita  Forma original (infixada) 3 * Percorre esquerda - Visita o nó IN-ORDEM (esquerda-raiz-direita): - percorre a sub-árvore esquerda; - visita o nó; - percorre a sub-árvore direita.

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda - Visita o nó - Percorre direita  Forma original (infixada) 3 * Percorre esquerda - Visita o nó - Percorre direita IN-ORDEM (esquerda-raiz-direita): - percorre a sub-árvore esquerda; - visita o nó; - percorre a sub-árvore direita.

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda - Visita o nó - Percorre direita  Forma original (infixada) 3 * Percorre esquerda IN-ORDEM (esquerda-raiz-direita): - percorre a sub-árvore esquerda; - visita o nó; - percorre a sub-árvore direita.

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda - Visita o nó - Percorre direita  Forma original (infixada) 3 * / - Percorre esquerda - Visita o nó IN-ORDEM (esquerda-raiz-direita): - percorre a sub-árvore esquerda; - visita o nó; - percorre a sub-árvore direita.

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda - Visita o nó - Percorre direita  Forma original (infixada) 3 * / - Percorre esquerda - Visita o nó - Percorre esquerda IN-ORDEM (esquerda-raiz-direita): - percorre a sub-árvore esquerda; - visita o nó; - percorre a sub-árvore direita.

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda - Visita o nó - Percorre direita  Forma original (infixada) 3 * / 10 - Percorre esquerda - Visita o nó - Percorre esquerda - Visita o nó IN-ORDEM (esquerda-raiz-direita): - percorre a sub-árvore esquerda; - visita o nó; - percorre a sub-árvore direita.

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda - Visita o nó - Percorre direita  Forma original (infixada) 3 * / 10 - Percorre esquerda - Visita o nó - Percorre esquerda - Visita o nó - Percorre direita IN-ORDEM (esquerda-raiz-direita): - percorre a sub-árvore esquerda; - visita o nó; - percorre a sub-árvore direita.

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda - Visita o nó - Percorre direita  Forma original (infixada) 3 * / 10 - Percorre esquerda - Visita o nó - Percorre esquerda IN-ORDEM (esquerda-raiz-direita): - percorre a sub-árvore esquerda; - visita o nó; - percorre a sub-árvore direita.

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 / - Percorre esquerda - Visita o nó - Percorre direita  Forma original (infixada) 3 * / 10 IN-ORDEM (esquerda-raiz-direita): - percorre a sub-árvore esquerda; - visita o nó; - percorre a sub-árvore direita.

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Os três mais comuns tipos de percursos em profundidade, definidos recursivamente, são: * 37 /  Forma original (infixada) 3 * / 10 Caminhamento em in-ordem: IN-ORDEM (esquerda-raiz-direita): - percorre a sub-árvore esquerda; - visita o nó; - percorre a sub-árvore direita.

Programação II – Prof. Mateus Raeder Percorra cada uma das árvores abaixo em PÓS-, PRÉ- e IN-ORDEM: Caminhamento em Árvores Binárias de Pesquisa a) b)c) 17 IN-ORDEM - percorre esquerda; - visita o nó; - percorre direita. PRÉ-ORDEM - visita o nó; - percorre esquerda; - percorre direita; PÓS-ORDEM - percorre esquerda; - percorre direita; - visita o nó;

Programação II – Prof. Mateus Raeder Caminhamento em Árvores Binárias de Pesquisa Respostas: a) PÓS-ORDEM: PRÉ-ORDEM: IN-ORDEM: b) PÓS-ORDEM: PRÉ-ORDEM: IN-ORDEM: c) PÓS-ORDEM: PRÉ-ORDEM: IN-ORDEM: IN-ORDEM - percorre esquerda; - visita o nó; - percorre direita. PRÉ-ORDEM - visita o nó; - percorre esquerda; - percorre direita; PÓS-ORDEM - percorre esquerda; - percorre direita; - visita o nó;

Programação II – Prof. Mateus Raeder IN-ORDEM public void inorder () { inorder(root); } private void inorder (BSTNode p) { if (p != null) { inorder(p.left); System.out.print(p.key + " "); inorder(p.right); } } IN-ORDEM - percorre esquerda; - visita o nó; - percorre direita.

Programação II – Prof. Mateus Raeder PRÉ-ORDEM public void preorder () { preorder(root); } private void preorder (BSTNode p) { if (p != null) { System.out.print(p.key + " "); preorder(p.left); preorder(p.right); } } PRÉ-ORDEM - visita o nó; - percorre esquerda; - percorre direita;

Programação II – Prof. Mateus Raeder PÓS-ORDEM public void postorder () { postorder(root); } private void postorder (BSTNode p) { if (p != null) { postorder(p.left); postorder(p.right); System.out.print(p.key + " "); } } PÓS-ORDEM - percorre esquerda; - percorre direita; - visita o nó;

Programação II – Prof. Mateus Raeder Remoção de um nó Ao remover um nó, 3 situações podem ocorrer : – Situação 1 : Exclusão de uma folha O nó é uma folha e não tem filhos –o ponteiro do seu pai é ajustado para nulo Nodo a ser excluído

Programação II – Prof. Mateus Raeder Remoção de um nó Ao remover um nó, 3 situações podem ocorrer : – Situação 2 : Nodo tem um filho Ponteiro do pai aponta para o filho deste nodo Nodo a ser excluído

Programação II – Prof. Mateus Raeder Remoção de um nó Ao remover um nó, 3 situações podem ocorrer : – Situação 3 : Nodo tem dois filhos Dois tipos de remoção –Por cópia –Por fusão Nodo a ser excluído

Programação II – Prof. Mateus Raeder Remoção por cópia Remove uma chave X (chave do nó que se quer remover): – sobrescrevendo-a por uma outra chave Y Y é o maior valor na sub-árvore esquerda, pois este vai ser maior que todos os valores da sub-árvore esquerda e ao mesmo tempo menor que os valores da sub-árvore direita –e então removendo o nó que contem Y que será um dos casos simples: folha, ou nó com apenas um filho

Programação II – Prof. Mateus Raeder Remoção por cópia Maior valor da sub-árvore esquerda Copia

Programação II – Prof. Mateus Raeder Remoção por cópia Deleta nodo (situação 1 ou 2) Final

Programação II – Prof. Mateus Raeder Encontra o pai de um nodo protected BSTNode searchFather (int el) { BSTNode p = root; BSTNode prev = null; //acha o nó p com a chave el while (p != null && !(p.key==el)) { prev = p; if (p.key < el) p = p.right; else p = p.left; } if (p!=null && p.key==el) return prev; return null; }

Programação II – Prof. Mateus Raeder protected BSTNode searchFather (int el) { BSTNode p = root; BSTNode prev = null; //acha o nó p com a chave el while (p != null && !(p.key==el)) { prev = p; if (p.key < el) p = p.right; else p = p.left; } if (p!=null && p.key==el) return prev; return null; } Exemplo de encontro de pai p el = 50

Programação II – Prof. Mateus Raeder protected BSTNode searchFather (int el) { BSTNode p = root; BSTNode prev = null; //acha o nó p com a chave el while (p != null && !(p.key==el)) { prev = p; if (p.key < el) p = p.right; else p = p.left; } if (p!=null && p.key==el) return prev; return null; } Exemplo de encontro de pai p prev el = 50

Programação II – Prof. Mateus Raeder protected BSTNode searchFather (int el) { BSTNode p = root; BSTNode prev = null; //acha o nó p com a chave el while (p != null && !(p.key==el)) { prev = p; if (p.key < el) p = p.right; else p = p.left; } if (p!=null && p.key==el) return prev; return null; } Exemplo de encontro de pai p prev el = 50

Programação II – Prof. Mateus Raeder protected BSTNode searchFather (int el) { BSTNode p = root; BSTNode prev = null; //acha o nó p com a chave el while (p != null && !(p.key==el)) { prev = p; if (p.key < el) p = p.right; else p = p.left; } if (p!=null && p.key==el) return prev; return null; } Exemplo de encontro de pai p prev el = 50

Programação II – Prof. Mateus Raeder protected BSTNode searchFather (int el) { BSTNode p = root; BSTNode prev = null; //acha o nó p com a chave el while (p != null && !(p.key==el)) { prev = p; if (p.key < el) p = p.right; else p = p.left; } if (p!=null && p.key==el) return prev; return null; } Exemplo de encontro de pai p prev el = 50 ? Sim

Programação II – Prof. Mateus Raeder protected BSTNode searchFather (int el) { BSTNode p = root; BSTNode prev = null; //acha o nó p com a chave el while (p != null && !(p.key==el)) { prev = p; if (p.key < el) p = p.right; else p = p.left; } if (p!=null && p.key==el) return prev; return null; } Exemplo de encontro de pai p prev el = 50

Programação II – Prof. Mateus Raeder protected BSTNode searchFather (int el) { BSTNode p = root; BSTNode prev = null; //acha o nó p com a chave el while (p != null && !(p.key==el)) { prev = p; if (p.key < el) p = p.right; else p = p.left; } if (p!=null && p.key==el) return prev; return null; } Exemplo de encontro de pai p prev el = 50

Programação II – Prof. Mateus Raeder protected BSTNode searchFather (int el) { BSTNode p = root; BSTNode prev = null; //acha o nó p com a chave el while (p != null && !(p.key==el)) { prev = p; if (p.key < el) p = p.right; else p = p.left; } if (p!=null && p.key==el) return prev; return null; } Exemplo de encontro de pai p prev el = 50

Programação II – Prof. Mateus Raeder protected BSTNode searchFather (int el) { BSTNode p = root; BSTNode prev = null; //acha o nó p com a chave el while (p != null && !(p.key==el)) { prev = p; if (p.key < el) p = p.right; else p = p.left; } if (p!=null && p.key==el) return prev; return null; } Exemplo de encontro de pai p prev el = 50

Programação II – Prof. Mateus Raeder protected BSTNode searchFather (int el) { BSTNode p = root; BSTNode prev = null; //acha o nó p com a chave el while (p != null && !(p.key==el)) { prev = p; if (p.key < el) p = p.right; else p = p.left; } if (p!=null && p.key==el) return prev; return null; } Exemplo de encontro de pai p prev el = 50 ? Não

Programação II – Prof. Mateus Raeder protected BSTNode searchFather (int el) { BSTNode p = root; BSTNode prev = null; //acha o nó p com a chave el while (p != null && !(p.key==el)) { prev = p; if (p.key < el) p = p.right; else p = p.left; } if (p!=null && p.key==el) return prev; return null; } Exemplo de encontro de pai p prev el = 50

Programação II – Prof. Mateus Raeder protected BSTNode searchFather (int el) { BSTNode p = root; BSTNode prev = null; //acha o nó p com a chave el while (p != null && !(p.key==el)) { prev = p; if (p.key < el) p = p.right; else p = p.left; } if (p!=null && p.key==el) return prev; return null; } Exemplo de encontro de pai p prev el = 50

Programação II – Prof. Mateus Raeder protected BSTNode searchFather (int el) { BSTNode p = root; BSTNode prev = null; //acha o nó p com a chave el while (p != null && !(p.key==el)) { prev = p; if (p.key < el) p = p.right; else p = p.left; } if (p!=null && p.key==el) return prev; return null; } Exemplo de encontro de pai p prev el = 50

Programação II – Prof. Mateus Raeder protected BSTNode searchFather (int el) { BSTNode p = root; BSTNode prev = null; //acha o nó p com a chave el while (p != null && !(p.key==el)) { prev = p; if (p.key < el) p = p.right; else p = p.left; } if (p!=null && p.key==el) return prev; return null; } Exemplo de encontro de pai p prev el = 50

Programação II – Prof. Mateus Raeder protected BSTNode searchFather (int el) { BSTNode p = root; BSTNode prev = null; //acha o nó p com a chave el while (p != null && !(p.key==el)) { prev = p; if (p.key < el) p = p.right; else p = p.left; } if (p!=null && p.key==el) return prev; return null; } Exemplo de encontro de pai p prev el = 50

Programação II – Prof. Mateus Raeder Remoção por cópia public void deleteByCopying (int el) { BSTNode node, father = null; node = search (el) ; // procura nó a ser deletado if (node != null && node.key==el) { if (node!=root) father = searchFather (el); // procura pai do nó a ser deletado if (node.right == null){ // nó não tem filho direito (situação 2 ou situação 1); if (node==root) root= node.left; else if (father.left == node) father.left = node.left; else father.right = node.left; } else if (node.left == null) { // nó não tem filho esquerdo (caso 2) if (node==root) root= node.right; else if (father.left == node) father.left = node.right; else father.right = node.right; } else { // nó tem ambos os filhos: fazer remoção por cópia BSTNode tmp = node.left; // 1. pegando sub-arvore esquerda while (tmp.right != null) // 2. acha a posição mais a direita da sub-árvore esquerda do nó tmp = tmp.right; deleteByCopying (tmp.key); // remove por copia o nó que possui o maior valor // da sub-arvore esquerda do nó a ser deletado node.key = tmp.key; // copia valor da chave do maior nó da sub-árvore esquerda } } else if (root != null) System.out.println("el " + el + " is not in the tree"); else System.out.println("the tree is empty"); }

Programação II – Prof. Mateus Raeder Exemplo de remoção por cópia public void deleteByCopying (int el) { BSTNode node, father = null; node = search (el) ; if (node != null && node.key==el) { if (node!=root) father = searchFather (el); if (node.right == null){ if (node==root) root= node.left; else if (father.left == node) father.left = node.left; else father.right = node.left; } else if (node.left == null) { if (node==root) root= node.right; else if (father.left == node) father.left = node.right; else father.right = node.right; } else { BSTNode tmp = node.left; while (tmp.right != null) tmp = tmp.right; deleteByCopying (tmp.key); node.key = tmp.key; } } else if (root != null) System.out.println("el " + el + " is not in the tree"); else System.out.println("the tree is empty"); }

Programação II – Prof. Mateus Raeder Remoção por fusão A solução consiste em fusionar as duas sub-árvores do nó a ser deletado em uma. Como na organização da árvore binária, todos os valores da sub-árvore a esquerda são menores que os valores da sub-árvore a direita –Deve-se encontrar o maior valor na sub-árvore esquerda (o mais na direita) –Este maior nó passa a ser pai da sub-árvore direita do nó a ser removido –Remove a chave, removendo o nó que contém a chave –E o pai do nó removido passa a apontar para a nova sub- árvore

Programação II – Prof. Mateus Raeder Remoção por fusão Maior valor da sub-árvore esquerda Passa a ser pai

Programação II – Prof. Mateus Raeder Remoção por fusão Final

Programação II – Prof. Mateus Raeder Remoção por fusão public void deleteByMerging (int el) { BSTNode tmp, node,father = null; node = search (el) ; // procura nó a ser deletado if (node != null && node.key==el) { if (node!=root) father = searchFather (el); // procura pai do nó a ser removido if (node.right == null){ // nó não tem filho direito (situações 1 e 2); if (root==node) root=node.left; else if (father.left == node) father.left = node.left; else father.right = node.left; } else if (node.left == null) { // nó não tem filho esquerdo (situação 2) if (root==node) root=node.right; else if (father.left == node) father.left = node.right; else father.right = node.right; } else { // se tem dois filhos, faz deleção por fusão tmp = node.left; // pega sub-arvore esquerda while (tmp.right != null) tmp = tmp.right; // pega filho mais a direita da sub-arvore esquerda tmp.right = node.right; // filho + a direita da sub-arvore esquerda passa a ter // como filho direito o filho direito do nó a ser deletado if (root==node) root = node.left; else if (father.left == node) father.left = node.left; else father.right = node.left; } } else if (root != null) System.out.println("el " + el + " is not in the tree"); else System.out.println("the tree is empty"); }

Programação II – Prof. Mateus Raeder Exemplo de remoção por fusão public void deleteByMerging (int el) { BSTNode tmp, node,father = null; node = search (el) ; if (node != null && node.key==el) { if (node!=root) father = searchFather (el); if (node.right == null){ if (root==node) root=node.left; else if (father.left == node) father.left = node.left; else father.right = node.left; } else if (node.left == null) { if (root==node) root=node.right; else if (father.left == node) father.left = node.right; else father.right = node.right; } else { tmp = node.left; while (tmp.right != null) tmp = tmp.right; tmp.right = node.right; if (root==node) root = node.left; else if (father.left == node) father.left = node.left; else father.right = node.left; } } else if (root != null) System.out.println("el " + el + " is not in the tree"); else System.out.println("the tree is empty"); }