Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    143

    [JAVA] Albero binario trovare valore minimo

    Ciao!
    Ho creato una classe BinaryTree con al suo interno una classe BinaryNode e sto cercando di creare un metodo ricorsivo che mi trovi il minimo valore di quest'albero e me lo restituisca.
    Ho fatto già il metodo che mi restituisce il massimo e pensavo che per il minimo sarebbe stato quasi uguale invece non mi funziona...

    codice:
    public class BinaryTree {
    
    	private BinaryNode root;
    
    	public static class BinaryNode {
    
    		private int dato;
    		private BinaryNode left = null;
    		private BinaryNode right = null;
    
                    [..altri metodi..]
                    
    		public int valoreMassimo() {
    			int max = dato;
    			if (left != null) {
    				int maxLeft = left.valoreMassimo();
    				if (maxLeft > max);
    					max = maxLeft;
    			}
    			if (right != null) {
    				int maxRight = right.valoreMassimo();
    				if (maxRight > max);
    					max = maxRight;
    			}
    			return max;
    		}
    
    		public int valoreMinimo() {
    			int min = dato;
    			if (left != null) {
    				int minLeft = left.valoreMinimo();
    				if (minLeft < min);
    					min = minLeft;
    			}
    			if (right != null) {
    				int minRight = right.valoreMinimo();
    				if (minRight < min);
    					min = minRight;
    			}
    			return min;
    		}
    
    		public int contaNodiMaggioriVal(int val) {
    			int cont = 0;
    			if (dato > val)
    				cont = cont + 1;
    			if (left != null) {
    				if (left.dato > val)
    					cont = cont + left.contaNodiMaggioriVal(val) + 1;
    				else
    					cont = cont + left.contaNodiMaggioriVal(val) + right.contaNodiMaggioriVal(val);
    			}
    			if (right != null) {
    				if (right.dato > val)
    					cont = cont + right.contaNodiMaggioriVal(val) + 1;
    				else
    					cont = cont + right.contaNodiMaggioriVal(val) + left.contaNodiMaggioriVal(val);
    			}
    			if (left == null)
    				cont = cont;
    			if (right == null)
    				cont = cont;
    			return cont;
    		}
    
    		public String toString() {
    			return dato + " " + left + " " + right;
    		}
    
    	}
    
            [..altri metodi..]
    
    	public int valoreMassimo() throws RuntimeException {
    		if (root == null)
    			throw new RuntimeException("Albero vuoto");
    		return root.valoreMassimo();
    	}
    
    	public int valoreMinimo() throws RuntimeException {
    		if (root == null)
    			throw new RuntimeException("Albero vuoto");
    		return root.valoreMinimo();
    	}
    
    	public int contaNodiMaggioriVal(int val) {
    		if (root == null)
    			return -1;
    		return root.contaNodiMaggioriVal(val);
    	}
    }
    codice:
    public class ProvaBinaryTree {
    	public static void main (String[] args) {
    
    		try {
    			System.out.println("Qual'e' il massimo valore presente in tree? " + tree.valoreMassimo());
                            System.out.println("Qual'e' il minimo valore presente in tree? " + tree.valoreMinimo());
    		} catch(RuntimeException a) {
    			System.out.println(a);
    		}
    		System.out.println();
    		
    System.out.println("Quanti sono i nodi con cargo > 5? " + tree.contaNodiMaggioriVal(5));
    
             }
    }
    Il problema è che il metodo del minimo mi restituisce il massimo.. Il massimo funziona però..

    Inoltre non mi viene nemmeno il metodo contaNodiMaggioriVal(int val). Questo metodo dovrebbe restituirmi il numero di nodi maggiori del valore passato come parametro. Non funziona perchè mi restituisce un numero più altro di quello che dovrebbbe.

    Qualcuno può aiutarmi?
    Grazie mille

    P.S: Se volessi scrivere il medoto del massimo o del minimo non ricorsivamente ma itretarivamente, come faccio? Un esempio perchè non riesco ad immaginarmelo..

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    143

    Re: [JAVA] Albero binario trovare valore minimo

    P.S: Se volessi scrivere il medoto del massimo o del minimo non ricorsivamente ma itretarivamente, come faccio? Un esempio perchè non riesco ad immaginarmelo..
    Volevo scrivere iterativamente, ho sbagliato..

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.