Binary Search Tree // Arvore Binaria de Procura iteradores

1 resposta
M

OI PESSOAL EU ESTOU A TENTAR FAZER UM ITERADOR QUE PERCORRE A MINHA ARVORE BINARIA
EM PREORDER

A SEGUIR APRESENTO O ITERADOR INORDER :

A MINHA DUVIDA E:"COMO FAZER UM METODO PREDECESSOR() QUE DEVOLVE O MEU SUCESSOR PREORDER.ISTO E UM METODO COMO O SUCESSOR() QUE APRESENTO MAIS ABAIXO
EU JA ESTOU A FAZER O PREDECESSOR MAS ESTOU A ENCARRAR DIFICULDADES:
EIS O PREDECESSOR()

private BSTNodo predecessor (BSTNodo umNo)

{

if (umNo == null) return null;

else if (umNo.left != null)  return p;

else      if(umNo.left==null&&umNo.pai.right!=null) return umNo.pai.right;
else...............................................................................


…aqui comeca o problema;

ESTE ITERADOR ESTA A CORRER SEM PROBLEMA MAS E INORDER
// iterador inorder privado inorder da classe BST

private class TreeIterator implements Iterator
 {
    private BSTNodo ultDevolv = null;
    private BSTNodo next;

    // construtor do iterador
    // Inicializa o iterador colocando-o a pontar
    // para o menor Nodo da BST
    private TreeIterator()
     {
      next = raiz;
      if (next != null)
         while (next.left != null)
             next = next.left;
      }// fim do construtor


    // Retorna true se ha um elemento na BST
    // a frente da actual posicao do Iterador
    // de contrario devolve  false
    public boolean hasNext()
      { return next != null;
      } // fim do metodo hasNext


     // Retorna o elemento seguinte
     // a actual posicao do iterador
    public Object next()
     {
       ultDevolv= next;
   next = sucessor(next);
       return ultDevolv.elem;
      } // fim do metodo next


     // Se o ultimo elemento devolvido pelo Iterador
     // ainda estiver na BST
     // remove-o da estrutura
public void remove()
     {
       System.out.println(" remove no iterador foi desactivado");
 } // fim do metodo remove

 } // fim da classe  TreeIterator

//METODO SUCESSOR()
//sucessor Inorder

// Se p possui um sucessor, retorna o endereco do nodo
// de contrario devolve  null
private BSTNodo sucessor (BSTNodo umNo)
{
  if (umNo == null) return null;
  else if (umNo.right != null)
         { // successor e leftmost de BSTNodo
           // na subarvore direita de umNo
       BSTNodo p = umNo.right;
  	       while (p.left != null)
        	p = p.left;
           return p;
      } // umNo tem um filho a direita
       else
       {
         // subir a esquerda e depois a direita
     BSTNodo p = umNo.pai;
     BSTNodo ch = umNo;
     while (p != null && ch == p.right)
         {	ch = p;
	p = p.pai;

      } // while
         return p;

        } // umNo nao tem filho a direita

} // fim do metodo sucessor

ABRACOS

1 Resposta

eros.stein

Já existe um algoritmo para busca binária. Confira o método binarySearch da classe Collections.

http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collections.html#binarySearch(java.util.List,%20java.lang.Object,%20java.util.Comparator)

OBS: Coloque seu código sempre entre as tags “”, desanima ler um código assim.

Criado 15 de outubro de 2007
Ultima resposta 15 de out. de 2007
Respostas 1
Participantes 2