adt arvore bin ria de pesquisa n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
ADT – Arvore Binária de Pesquisa PowerPoint Presentation
Download Presentation
ADT – Arvore Binária de Pesquisa

Loading in 2 Seconds...

play fullscreen
1 / 30

ADT – Arvore Binária de Pesquisa - PowerPoint PPT Presentation


  • 109 Views
  • Uploaded on

ADT – Arvore Binária de Pesquisa. ATAI. Árvore Binária de Pesquisa ( Binary Search Tree). Árvore binária de pesquisa (BST) é uma árvore binária especial (ordenada). A localização do nó é determinada pela chave (identificador único) do elemento.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

ADT – Arvore Binária de Pesquisa


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
rvore bin ria de pesquisa binary search tree
Árvore Binária de Pesquisa(Binary Search Tree)

Árvore binária de pesquisa (BST) é uma árvore binária especial (ordenada). A localização do nó é determinada pela chave (identificador único) do elemento.

Uma árvore binária de pesquisa é uma árvore binária com as seguintes propriedades:

  • a chave de qualquer nó é maior que todas as chaves da subárvore esquerda;
  • a chave de qualquer nó é menor (ou igual) que todas as chaves da subárvore direita.

Se a chave é uma cadeia de caracteres, então a cadeia de caracteres da esquerda deve ser lexicalmente menor que a cadeia de caracteres da direita.

exemplo

cat

lion

(b)

(a)

fox

pig

rat

cat

fox

pig

tiger

tiger

dog

dog

lion

rat

Exemplo
defini o recursiva
Definição Recursiva

Uma BST é:

  • vazia, ou
  • Não vazia, neste caso possui:
    • Uma raiz que possui um elemento elem
    • Um ligação à sub-árvores esquerda na qual (se não for vazia) todos os elementos são menores do que elem
    • Um ligação à sub-árvores direita na qual (se não for vazia) todos os elementos são maiores do que elem
procura numa bst
Procura numa BST

1. Por curr para a raiz da BST.2. Repetir: 2.1. se curr é null: 2.1.1. Terminar com resposta não. 2.2. senão, se target é igual ao elemento na posição curr: 2.2.1. Terminar com resposta curr. 2.3. se não, se target é menor do que elemento curr: 2.3.1. curr passa a ser o seu filho esquerdo. 2.4. se não , se target é maior do que elemento curr: 2.4.1. curr passa a ser o seu filho direito.

procura numa bst com sucesso

To find which if any node of a BST contains an element equal to target:1. Set curr to the BST’s root.2. Repeat: 2.1. If curr is null, terminate with answer none. 2.2. Otherwise, if target is equal to curr’s element, terminate with answer curr. 2.3. Otherwise, if target is less than curr’s element, set curr to curr’s left child. 2.4. Otherwise, if target is greater than curr’s element, set curr to curr’s right child.

To find which if any node of a BST contains an element equal to target:1. Set curr to the BST’s root.2. Repeat: 2.1. If curr is null, terminate with answer none. 2.2. Otherwise, if target is equal to curr’s element, terminate with answer curr. 2.3. Otherwise, if target is less than curr’s element, set curr to curr’s left child. 2.4. Otherwise, if target is greater than curr’s element, set curr to curr’s right child.

To find which if any node of a BST contains an element equal to target:1. Set curr to the BST’s root.2. Repeat: 2.1. If curr is null, terminate with answer none. 2.2. Otherwise, if target is equal to curr’s element, terminate with answer curr. 2.3. Otherwise, if target is less than curr’s element, set curr to curr’s left child. 2.4. Otherwise, if target is greater than curr’s element, set curr to curr’s right child.

To find which if any node of a BST contains an element equal to target:1. Set curr to the BST’s root.2. Repeat: 2.1. If curr is null, terminate with answer none. 2.2. Otherwise, if target is equal to curr’s element, terminate with answer curr. 2.3. Otherwise, if target is less than curr’s element, set curr to curr’s left child. 2.4. Otherwise, if target is greater than curr’s element, set curr to curr’s right child.

To find which if any node of a BST contains an element equal to target:1. Set curr to the BST’s root.2. Repeat: 2.1. If curr is null, terminate with answer none. 2.2. Otherwise, if target is equal to curr’s element, terminate with answer curr. 2.3. Otherwise, if target is less than curr’s element, set curr to curr’s left child. 2.4. Otherwise, if target is greater than curr’s element, set curr to curr’s right child.

lion

lion

lion

lion

lion

target

target

target

target

target

pig

pig

pig

pig

pig

root

root

root

root

root

fox

fox

fox

fox

fox

rat

rat

rat

rat

rat

curr

curr

curr

curr

cat

cat

cat

cat

cat

pig

pig

pig

pig

pig

tiger

tiger

tiger

tiger

tiger

dog

dog

dog

dog

dog

Procura numa BST (com sucesso)
slide7

To find which if any node of a BST contains an element equal to target:1. Set curr to the BST’s root.2. Repeat: 2.1. If curr is null, terminate with answer none. 2.2. Otherwise, if target is equal to curr’s element, terminate with answer curr. 2.3. Otherwise, if target is less than curr’s element, set curr to curr’s left child. 2.4. Otherwise, if target is greater than curr’s element, set curr to curr’s right child.

To find which if any node of a BST contains an element equal to target:1. Set curr to the BST’s root.2. Repeat: 2.1. If curr is null, terminate with answer none. 2.2. Otherwise, if target is equal to curr’s element, terminate with answer curr. 2.3. Otherwise, if target is less than curr’s element, set curr to curr’s left child. 2.4. Otherwise, if target is greater than curr’s element, set curr to curr’s right child.

To find which if any node of a BST contains an element equal to target:1. Set curr to the BST’s root.2. Repeat: 2.1. If curr is null, terminate with answer none. 2.2. Otherwise, if target is equal to curr’s element, terminate with answer curr. 2.3. Otherwise, if target is less than curr’s element, set curr to curr’s left child. 2.4. Otherwise, if target is greater than curr’s element, set curr to curr’s right child.

To find which if any node of a BST contains an element equal to target:1. Set curr to the BST’s root.2. Repeat: 2.1. If curr is null, terminate with answer none. 2.2. Otherwise, if target is equal to curr’s element, terminate with answer curr. 2.3. Otherwise, if target is less than curr’s element, set curr to curr’s left child. 2.4. Otherwise, if target is greater than curr’s element, set curr to curr’s right child.

To find which if any node of a BST contains an element equal to target:1. Set curr to the BST’s root.2. Repeat: 2.1. If curr is null, terminate with answer none. 2.2. Otherwise, if target is equal to curr’s element, terminate with answer curr. 2.3. Otherwise, if target is less than curr’s element, set curr to curr’s left child. 2.4. Otherwise, if target is greater than curr’s element, set curr to curr’s right child.

lion

lion

lion

lion

lion

target

target

target

target

target

goat

goat

goat

goat

goat

root

root

root

root

root

fox

fox

fox

fox

fox

rat

rat

rat

rat

rat

curr

curr

curr

curr

cat

cat

cat

cat

cat

pig

pig

pig

pig

pig

tiger

tiger

tiger

tiger

tiger

dog

dog

dog

dog

dog

Procura numa BST (sem sucesso)

inserir elemento numa bst
Inserir elemento numa BST
  • Ideia:
    • Para iserir um novo elemento numa BST, processa como no método de procura. Se o elemento não estiver já presente, o método de procura vai terminar numa ligação nula. Substitua esta ligação nula por uma ligação para um nó (do tipo folha) que possui o elemento.
remover elemento numa bst
Remover elemento numa BST

1. Eliminar o elemento com as árvores esquerda e direita vazias (implica remoção do nó)

2. Eliminar o elemento com a árvores esquerda (ou direita) vazia (implica remoção do nó)

remover elemento numa bst cont
Remover elemento numa BST (cont.)

3. Eliminar o elemento com as árvores esquerda e direita não vazias

Soluções:

  • Substituir o valor do nó a eliminar com o valor do nó mais a direita na árvore esquerda do nó a eliminar (i.e. maior valor da árvore esquerda)Apagar o nó mais a direita.
  • Substituir o valor do nó a eliminar com o valor do nó mais a esquerda na árvore direita do nó a eliminar (i.e. menor valor da árvore direita)Apagar o nó mais a esquerda.
exemplo inser es sucessivas

Inicio:

Após inserir ‘dog’:

Após inserir ‘cat’:

Após inserir ‘fox’:

lion

lion

lion

fox

fox

fox

rat

rat

cat

cat

pig

dog

Após inserir‘pig’:

Após inserir ‘lion’:

Após inserir ‘tiger’:

Após inserir ‘rat’:

lion

lion

lion

lion

fox

fox

fox

rat

rat

rat

cat

cat

pig

pig

tiger

dog

Exemplo: Inserções Sucessivas
  • Animação (Inserir ‘lion’, ‘fox’, ‘rat’, ‘cat’, ‘pig’, ‘dog’, ‘tiger’):
exemplo inser es sucessivas1

Inicio:

Após inserir ‘cat’:

Após inserir‘dog’:

Após inserir‘fox’:

Após inserir ‘rat’:

Após inserir ‘lion’:

Após inserir ‘pig’:

cat

cat

cat

cat

cat

cat

dog

dog

dog

dog

dog

fox

fox

fox

fox

lion

lion

lion

pig

pig

rat

Exemplo: Inserções Sucessivas
  • Animação(Inserir ‘cat’, ‘dog’, ‘fox’, ‘lion’, ‘pig’, ‘rat’):
interface da rvore bin ria de pesquisa binarysearchtree bst
Interface da àrvore Binária de Pesquisa (BinarySearchTree - BST)

public interface BinarySearchTree {

public void insert(Comparable x ); //Insere o Elemento x

public void remove(Comparable x ); //Remove o Elemento x

public Comparable findMin( ); //Retorna o menor elemento

public Comparable findMax( ); //Retorna o maior elemento

public Position findKey(Comparable key ); //Retorna a posição do //elemento com a chave key

public boolean isEmpty( ); //Retorna TRUE se está vazia

public void printTreeIn(); //Imprime os Elementos em INORDER

public void printTreePre(); //Elementos em PREORDER

public void printTreePos(); //Elementos em POSORDER

}

classe n do bst
Classe nó do BST

publicclassBSTNodeimplements Position{

protected Comparable element;protected BSTNode left, right;

protected BSTNode (Comparable elem) { element = elem; left = null; right = null; }

public Comparable element() {

return element;

}

publicvoidsetElement (Comparable elem){

element = elem;

}

….

}

BSTNode metodos gets e sets

slide18

Classe BST

publicclass BST implementsBinarySearchTree {

private BSTNode root;

public BST () { // cria uma árvore vazia root = null; }

}

slide19

Método de procura

public Position findKey (Comparable target) {int direction = 0; BSTNode curr = root;for (;;) {if (curr == null) returnnull; direction = target.compareTo(curr.element());if (direction == 0) return curr;elseif (direction < 0) curr = curr.getLeft();else curr = curr.getRight(); }}

slide20

Método inserir

publicvoidinsert (Comparable elem) {int direction = 0; BSTNode parent = null, curr = root;for (;;) {if (curr == null) { BSTNode ins = new BSTNode(elem);if (root == null) root = ins;elseif (direction < 0) parent.setLeft(ins);else parent.setRight(ins);return; }

direction = elem.compareTo(curr.element());if (direction == 0) return; parent = curr; if (direction < 0) curr = curr.getLeft();else curr = curr.getRight(); }}

m todo privado que retorna o elemento mais a esquerda da rvore
Método privado que retorna o elemento mais a esquerda da árvore

private Comparable getLeftmost () { BSTNode curr = this;while (curr.getLeft() != null) curr = curr.getLeft();return curr.element();}

m todo privado que elimina o elemento mais a esquerda da rvore
Método privado que elimina o elemento mais a esquerda da árvore

private BSTNode deleteLeftmost () {if (this.left == null)returnthis.right;else { BSTNode parent = this,

curr = this.getLeft();while (curr.getLeft() != null) { parent = curr; curr = curr.getLeft(); } parent.setLeft(curr.getRight());returnthis; }}

eliminar um n do topo da rvore
Eliminar um nó do topo da árvore

public BSTNode deleteTopmost () {if (this.left == null)returnthis.getRight();//não tem sub-árvore esquerda

elseif (this.right == null)returnthis.getLeft ();//não tem sub-árvore direita

else { // nó tem dois filhosthis.element = (this.getRight()).getLeftmost();this.setRight((this.getRight()).deleteLeftmost());returnthis; }}

eliminar um n da rvore
Eliminar um nó da árvore

publicvoidremove (Comparable elem) {int direction = 0; BSTNode parent = null, curr = root;for (;;) {if (curr == null) return; direction = elem.compareTo(curr.element());if (direction == 0) { BSTNode del = curr.deleteTopmost();//eliminar o currif (curr == root) root = del;elseif (curr == parent.getLeft()) parent.setLeft(del);else parent.setRight(del);return; }

parent = curr; if (direction < 0) curr = parent.getLeft();else // direction > 0 curr = parent.getRight(); }}

imprimir os elementos da rvore in order
Imprimir os elementos da árvore (in-order)

publicstaticvoidprintInOrder (BSTNode top) {// imprima em forma crescente

// todos os elementos da árvore top

if (top != null) {printInOrder(top.getLeft()); System.out.println(top.element());printInOrder(top.getRight()); }}

opera o insert
Operação insert

// Inserir elemento x na Árvore;

// Se o elemento existir não se insere

public voidinsert( Comparable x )

{

root = insert( x, root );

}

/*

* Retorna o novo Nó

*/

private BinaryNode insert( Comparable x, BinaryNode t )

{

if( t == null )

t = new BSTNode( x, null, null );

else if( x.compareTo( t.element() ) < 0 )

t.setLeft (insert( x, t.getLeft() ));

else if( x.compareTo( t.element() ) > 0 )

t.setRight (insert( x, t.getRight() ));

else

;// Se houver duplicação não inserir o elemento

return t;

}

opera o remove
Operação remove

private BSTNode remove( Comparable x, BSTNode t )

{

if( t == null )

return t;

if( x.compareTo( t.element ) < 0 )

t.setLeft( remove( x, t.getLeft() );

else if( x.compareTo( t.element ) > 0 )

t.setRight( remove( x, t.getRight() );

else if( t.getLeft() != null&&

t.getRight() != null )

{

t.setElement(findMin( t.getRight ()).element);

t.setRight (remove( t.element, t.right );

}

else

t = ( t.getLeft() != null ) ? t.getLeft() : t.getRight();

return t;

}

opera o que retorna o menor elemento da rvore
Operação que retorna o menor elemento da árvore

publicComparablefindMin( )

{

return element( findMin( root ) );

}

private BSTNodefindMin (BSTNodet )

{

if( t == null )

returnnull;

else if( t.getLeft() == null )

return t;

returnfindMin( t.getLeft() );

}