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..