Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [JAVA] Verifica correttezza albero binario (problemi nella ricorsione)

    Salve a tutti, ho scritto questo metodo che dovrebbe controllare se un albero binario è proprio utilizzando la ricorsione. Il problema è che eclipse mi segna come sbagliato il metodo isBst e non capisco perchè.

    codice:
    	public static <E> boolean isProper(BinaryTree<E> T) throws EmptyTreeException { 		 		
    BTPosition<E> start = (BTPosition<E>) T.root();
      		if (T.isEmpty())
     			throw new EmptyTreeException("ERRORE: l'albero è vuoto");
      		if (T == null) 
     			return true; //Un albero vuoto è un albero di ricerca
      		return isBST(start);
     	} 
    	private boolean isBST(BTPosition<E> tn) throws InvalidPositionException {
     		Comparator<E> comp = new DefaultComparator<E>();
      		if (tn.getLeft()==null && tn.getRight()==null)
      			return true; //Se sono foglia sono un albero di ricerca
      		if (tn.getLeft()==null && comp.compare(tn.element(), tn.getRight().element())<0)
      			return true; //Se il sottoalbero sinistro è vuoto e sono piu piccolo del sottoalbero destro sono un BST
     		if (tn.getLeft()==null && comp.compare(tn.element(), tn.getRight().element())>0)
      			return false; //Se il sottoalbero sinistro è vuoto e sono piu grande del sottoalbero destro non sono un BST
      		if (tn.getRight()==null && comp.compare(tn.element(), tn.getLeft().element())>0) 
     			return true; //Se il sottoalbero destro è vuoto e sono piu grande del sottoalbero sinistro sono un BST
     		if (tn.getRight()==null && comp.compare(tn.element(), tn.getLeft().element())<0)
      			return false; //Se il sottoalbero destro è vuoto e sono piu piccolo del sottoalbero sinistro non sono un BST
      		if (comp.compare(tn.element(), tn.getLeft().element())<0 || comp.compare(tn.element(), tn.getRight().element())>0)
      			return false; //Se sono piu grande del sottoalbero destro o piu piccolo di quello sinistro non sono un BST
      		return isBST(tn.getLeft()) && isBST(tn.getRight()); //controllo se i miei figli sono bst 	}
    Eclipse mi dice che: The method isBST(BTPosition<E>) in the type LinkedBinaryTree<E> is not applicable for the arguments (BTPosition<E>)
    Le soluzioni che mi propone però non risolvono il problema e io inizio a chiedermi dove sto sbagliando... se qualcuno potesse spiegarmelo gliene sarei molto grato

  2. #2
    Ok, potete darmi ufficialmente dello stupido.
    Non mi ero accorto che la classe era dichiarata come statica... avrei cancellato il post vista la sua inutilità ma già che ci sono ne approfitto per chiedere se secondo voi il metodo è corretto. Ho fatto qualche prova e sembra funzionare ma se qualcuno volesse darmi la sua opinione... a disposizione.

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.