Pages: [1]   Go Down
Print
Author Topic: Alberi  (Read 972 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Gpeppe69
Apprendista Forumista
**
Offline Offline

Posts: 294



« on: 04-05-2012, 11:53:26 »

Salve ho implementato un albero binario con una visita preorder ora vorrei stampare i valori secondo il preorder nel metodo richiamo il metodo visit() che restituisce il valore del nodo puntato, soltanto che da errore e non stampa l'albero secondo il preorder  testate come risolvere ?
Logged
Ocelot92
Apprendista Forumista
**
Offline Offline

Posts: 301



« Reply #1 on: 04-05-2012, 13:22:45 »

Metti il codice del preorder e dicci cosa stampa. O è la l'errore oppure hai caricato male l'albero. Hai fatto l'inserimento per come l'abbiamo la scorsa volta a lezione? oppure ti sei fatto un albero ad hoc?
Logged

I'm happy to tell you all that...
((λf.λx.f(f(x))) (λy.y^2)) (5)  = 5^4

"Si ma dillo che bisogna cliccare APPLY per crearle le partizioni…" - cit. Utente dopo aver seguito un How-To... .-.
Gpeppe69
Apprendista Forumista
**
Offline Offline

Posts: 294



« Reply #2 on: 04-05-2012, 14:42:36 »

ecco qui :

Code:
import java.io.*;

class Stack        // implementiamo la pila
{
 private int top;
private static final int max=7;
private IntBTNodo val;
private IntBTNodo []i;

public Stack()
{
top=0;
i=new IntBTNodo[max];
}
public boolean isFull()
{
return (top==max);
}

public boolean isEmpty()
{
return (top==0);
}

public boolean Push(IntBTNodo val)
{
if(isFull())
return false;

i[top++]=val;
return true;

}
public IntBTNodo Pop()
{
IntBTNodo tmp;
 tmp=i[top-1];
top--;

return tmp;
}

}

class IntBTNodo                          // implementiamo un albero binario di interi
{
IntBTNodo left,right;
protected IntBTNodo root=null;
protected int key;
 
public IntBTNodo()
{

left=null;
right=null;

}

public IntBTNodo(int val)
{

  this (val,null,null);

}
public IntBTNodo(int val,IntBTNodo l, IntBTNodo r)
{
key=val;
left=l;
right=r;
 
}

public int visit()
{

        return key;
}


public boolean inserisci(int val)  // inserisci un valore nell'albero
{
   if(root==null)
     root=new IntBTNodo(val);
   else
   {
   IntBTNodo p=root, prev=null;
   
   while(p!=null){
   if(val==p.key)
      return false;
   prev=p;
   
   if(val<p.key)
     p=p.left;
      else
    p=p.right;
      }
   
   if(val<prev.key)
   prev.left=new IntBTNodo(val);
   else
   prev.right=new IntBTNodo(val);
        }
   return true;
   
   }
protected void ITERpreorder()    // metodo che visita l'albero in preorder
{
IntBTNodo p=root;

Stack s=new Stack();

if (p!=null)
{
 s.Push(p);

while(!s.isEmpty())
{
  p=(IntBTNodo)s.Pop();
  p.visit();

  if(p.right!=null)s.Push(p.right);
     if(p.left!=null)s.Push(p.left);
     
    }

  }

 }
     
}

public class albero {


public static void main(String[] args) {

BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));

IntBTNodo n=new IntBTNodo();

System.out.println("inserisci");
for(int i=0;i<7;i++)
try {
n.inserisci(Integer.parseInt(bf.readLine()));
} catch (NumberFormatException | IOException e) {

e.printStackTrace();
}

    n.ITERorder();

}

}


Logged
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #3 on: 04-05-2012, 15:18:32 »

Ovvio che non funzioni, nella dichiarazione tu scrivi:

Quote
ITERpreorder()

e nel main scrivi:
Quote
ITERorder();

Tipico errore dello studente che preso dalla passione non fa pause caffè...

P.S Credo non abbia senso fare la visita preorder con un metodo che restituisce void, conviene usarne uno che restituisce un tipo String, all' interno del metodo visiti l' albero concatenando la stringa con i vari nodi, e alla fine la fai restituire. Altrimenti quando nel main invochi il metodo essendo void non ti stamperà niente.
« Last Edit: 04-05-2012, 15:23:34 by Daréios89 » Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
Gpeppe69
Apprendista Forumista
**
Offline Offline

Posts: 294



« Reply #4 on: 04-05-2012, 15:28:11 »

aahahahahh no no scusami ma il metodo scritto non c'era quando l'ho copiato sul forum l'ho scritto dopo in fretta cmq ti dico che nel compilatore era scritto in maniera corretta e ti dico anche che ho risolto tutto, il mio problema era che nel preorder quando chiamavo la visit() non gli davo il system.out.print()    [Emoticon] Asd il fatto e che li sto interprentando in modo diverso dalle liste quando invece l'implementazione e quasi uguale  e questo mi fa impazzire    comunque grazie
Logged
Pages: [1]   Go Up
Print
Jump to: