Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    171

    Cancellazione Nodo da un albero binario

    ciao a tutti.
    devo implementare le operazioni di dato astratto dizionario con un albero binario di ricerca.

    Sto implementando l'eliminazione di un nodo dell'albero, e da 2 giorni che giro su internet trovando vari esempi ma non funziona.
    questo è il mio metodo remove:

    codice:
    private Node remove(Comparable key, Node t){
    		
    		if(t == null){
    		
    			return null;}
    		
    	    if(key.compareTo( t.getKey() ) < 0 ) {
    	    	t.left = remove( key, t.left );
    	        
    	    } else if(key.compareTo( t.getKey() ) > 0) {
    	    	t.right = remove( key, t.right );
    	    } else {
    	        if(t.right == null) {
    	        	
    	            return t.left;
    	        }
    	        if(t.left == null) {
    	        	
    	            return t.right;
    	        }
    	        
    	        Node temp;
    	        temp = minValue(t.right);//--------http://www.java2blog.com/2016/04/how-to-delete-node-from-binary-search.html
    	        
    	        t.setKey(temp.getKey());
    	        t.setValue(temp.getValue());
    	        System.out.println(t.getKey());
    	        System.out.println(temp.getKey());
    	        
    	        remove((Comparable)temp.getKey(), t.right);
    	    }
    	    return t;
    	}
    	
    	
    	private Node minValue(Node root)
        {
             
            while (root.left != null)
            {
               
                root = root.left;
            }
            return root;
        }

    cosa c'è di sbagliato ?
    dopo che trovo il minimo entra sempre nel if nodo == null

    mi potreste spiegare come deve funzionare il metodo remove ?

    grazie a tutti

  2. #2
    secondo me questa parte di codice non viene mai eseguita
    codice:
    Node temp;
    temp = minValue(t.right);//--------http://www.java2blog.com/2016/04/how-to-delete-node-from-binary-search.html
               
    t.setKey(temp.getKey());
    t.setValue(temp.getValue());
    System.out.println(t.getKey());
    System.out.println(temp.getKey());
                
    remove((Comparable)temp.getKey(), t.right);
    }
    return t;

    Perché ad ogni iterazione ritorni indietro.
    Se t==null return
    se t.getKey() < 0 richiami ricorsivamente la funzione
    se t.getKey() > 0 richiami ricorsivamente la funzione
    in tutti gli altri casi
    se t.right == null return qualcosa
    se t.left == null return qualcosa

    quindi tu non scendi mai nella funzione che ti crea il nodo.

    Credo che sarebbe meglio prima studiare a fondo il sistema degli alberi binari invece che scopiazzare a dx e sx del codice che alla fine non capisci nemmeno tu.

    Ciao.
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    171
    veramente quella parte di codie viene eseguita, infatti mi stampa
    codice:
    System.out.println(t.getKey());
    System.out.println(temp.getKey());
    il problema è che non mi cancella alcuni nodi mentre la maggior parte li cancella.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.