Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    13

    metodo per verificare se un albero binario è di ricerca o meno

    Ciao a tutti devo realizzare un metodo che dato un albero binario, verifica se è di ricerca o meno, restituendo un valore booleano.
    Ho provato a realizzarlo inserendo un ciclo while che ripete le operazioni finquando terminano i nodi dell'albero e mettendo al suo interno il confronto delle stringhe utilizzando il metodo compareTo(). In caso positivo si ripete il tutto ricorsivamente, altrimenti si restituisce false.
    Per iniziare ho fatto le verifiche solo sul sottoalbero sinistro, ma già qui o dei problemi, il programma viene compilato ma spesso non restituisce il valore corretto

    Attendo vostri suggerimenti
    grazie!

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    75
    Ti posto il codice di un metodo che ho scritto tempo fa che opera su BST con chiavi di tipo int.

    codice:
                    public class BSTNode {
    			protected int key;
    			protected BSTNode leftChild;
    			protected BSTNode rightChild;
    		}
    		
    		public class BST {
    			protected BSTNode root;
    			protected int precedente;
    			
    			private boolean isBSTRic(BSTNode t) {
    				if (t==null) return true;
    				
    				//visita sottoalbero sx
    				if (!isBSTRic(t.leftChild)) return false;
    				
    				//Visita nodo corrente, verificando che la sua chiave SEGUA
    				//la chiave dell'ultimo nodo visitato (precedente)
    				if (precedente > t.key) return false;
    				precedente = t.key;
    				
    				//visita sottoalbero dx
    				return isBSTRic(t.rightChild);
    			}
    			
    			public static boolean isBST(BSTNode t) {
    				precedente = Integer.MIN_VALUE;
    				return isBSTRic(t);
    			}
    			
    		}

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    13
    io ho provato a fare così però credo che controlla sola il primo figlio sinistro! Come se non effettuasse la ricorsione... chi mi dice dove ho sbagliato?

    codice:
    public static boolean verificaBinarioRicerca (Nodo radice) {
    		if(radice==null)
    			return false;
    		if(radice.info.compareTo(radice.sinistro.info)>=0) {
    			verificaBinarioRicerca(radice.sinistro);
    				return true;
    		}
    		return false;
    	}

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.