Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    10

    Universita algoritmo in java

    ciao mi si richiedeva come esercizio di utilizzare la ricorsione per la ricerca del predecessore di un numero in un albero binario di ricerca;
    questo è il codice che ho fatto e mi restituisce sempre la radice dell'albero anziche del predecessore....dove sbaglio???

    class prec {

    public static int precprec(int k, BSTnode root) {

    BSTnode p= root;
    if(root == null)
    return 0;

    else if((count(root)==1) || (count(root)==2))
    return 0;


    else {

    BSTnode prev = p;
    if(prev.info >= k)

    precprec(k, p.left);
    else {

    precprec(k, p.right);
    }

    return prev.info;
    }

    }


    public static int count(BSTnode h) {

    if(h==null) return 0;

    return 1+ count(h.left) + count(h.right);
    }

    public static BSTnode albero2() {

    BSTnode a,b,c,d,e,f,g;

    a = new BSTnode();
    b = new BSTnode();
    c = new BSTnode();
    d = new BSTnode();
    e = new BSTnode();
    f = new BSTnode();
    g = new BSTnode();

    a.info = 25; a.left= null;a.right=null;
    b.info = 75; b.left=null;b.right=null;
    c.info = 150;c.left=null;c.right=null;
    d.info = 300;d.left=null;d.right=null;
    e.info = 50;e.left = a;e.right=b;
    f.info =200;f.left=c;f.right=d;
    g.info=100;g.left=e;g.right=f;
    BSTnode albero = g;
    return albero;
    }




    public static void main(String args[]) {

    BSTnode p = albero2();
    int r=precprec(75, p);
    int numeronodi= count(p);
    System.out.println(r);
    System.out.println(p);



    }

    }


    ************************************************** ******
    ************************************************** ******
    class BSTnode {

    public BSTnode left, right;
    public int info;




    public BSTnode(){
    left =null;
    right=null;
    info= 0;
    }

    public BSTnode(BSTnode l, BSTnode r, int i) {
    left=l;
    right=r;
    info=i;
    }

    public BSTnode(int i) {
    left=right=null;
    info=i;
    }


    public boolean isLeaf() {
    return left==null && right==null;
    }
    }

  2. #2
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    dove sbaglio???
    A non usare il tag [c ode] [/c ode] o [p hp] [/p hp] come da regolamento...


    codice:
    class prec
    {
    
    	public static int precprec(int k, BSTnode root)
    	{
    		BSTnode p= root;
    		if(root == null)
    			return 0;
    
    		if((count(root)==1) || (count(root)==2))
    			return 0;
    			
    		// Ho eliminato qualche else ininfluenti...
    
    		BSTnode prev = p;
    		if(prev.info >= k)
    			precprec(k, p.left);
    		else
    			precprec(k, p.right);
    		
    		return prev.info;
    	}
    
    
    	public static int count(BSTnode h)
    	{
    		if(h==null) return 0;
    		return 1+ count(h.left) + count(h.right);
    	}
    
    
    	public static BSTnode albero2()
    	{
    		BSTnode a,b,c,d,e,f,g;
    
    		a = new BSTnode();
    		b = new BSTnode();
    		c = new BSTnode();
    		d = new BSTnode();
    		e = new BSTnode();
    		f = new BSTnode();
    		g = new BSTnode();
    
    		a.info = 25; a.left= null;a.right=null;
    		b.info = 75; b.left=null;b.right=null;
    		c.info = 150;c.left=null;c.right=null;
    		d.info = 300;d.left=null;d.right=null;
    		e.info = 50;e.left = a;e.right=b;
    		f.info =200;f.left=c;f.right=d;
    		g.info=100;g.left=e;g.right=f;
    		BSTnode albero = g;
    
    		return albero;
    	}
    
    
    
    
    	public static void main(String args[])
    	{
    		BSTnode p = albero2();
    		int r=precprec(75, p);
    		int numeronodi= count(p);
    		System.out.println(r);
    		System.out.println(p);
    	}
    }
    
    
    ********************************************************
    ********************************************************
    
    class BSTnode
    {
    
    	public BSTnode left, right;
    	public int info;
    
    	public BSTnode()
    	{
    		left =null;
    		right=null;
    		info= 0;
    	}
    
    	public BSTnode(BSTnode l, BSTnode r, int i)
    	{
    		left=l;
    		right=r;
    		info=i;
    	}
    
    	public BSTnode(int i)
    	{
    		left=right=null;
    		info=i;
    	}
    
    
    	public boolean isLeaf()
    	{
    		return left==null && right==null;
    	}
    }
    Alcune note un po' stupide...:

    codice:
    // Nome delle con la prima lettera maiuscola!!!
    class prec
    {
    
    	// Forse il nome doveva essere precPrec
    	public static int precprec(int k, BSTnode root)
    	{
    E adesso si aspetta...
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  3. #3
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Controlla questo codice... :

    Codice PHP:
        public static int precprec(int kBSTnode root)
        {
            
    BSTnode proot;
            if(
    root == null)
                return 
    0;

            if((
    count(root)==1) || (count(root)==2))
                return 
    0;
                
            
    // Ho eliminato qualche else ininfluenti...

            
    BSTnode prev p;
            if(
    prev.info >= k)
                
    precprec(kp.left);
            else
                
    precprec(kp.right);
            
            return 
    prev.info;
        } 
    chiami precprec(k, p.left);oppure precprec(k, p.right); ma non usi il risultato di questa chimata, alla fine è come se queste chiamate non le facessi proprio, visto che in ogni caso restituisci prev.info; dove prev è la root dell'albero... spero ti sia chiaro...

    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    10
    ok...questo l'ho capito.....solo nn so come riuscire a mantenere un riferimento al nodo visitato ad ogni ricorsione... in termini di codice.....

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.