package binary_tree;

import java.util.Iterator;

public class ExerciseBinaryTree {
	
	
	/*
	 * Esercizio 1  II parziale 10.01.2018
	 * Un albero binario di interi si dice pari se tutti i nodi contengono
	 * un intero positivo pari.  Realizzare il metodo statico 
	 * public static boolean IsEvenBtree (BinaryTree<Integer> btree) 
	 * che verifica se l'albero binario dato btree e' pari.
	 */
	/*
	 * Spiegazione, in questo caso, non stiamo operando direttamente 
	 * dall'interno dell'albero, quindi possiamo sfruttare gli iteratori.
	 * Essendo che dobbiamo per forza verificare tutit i vari nodi possiamo
	 * adoperare qualsiasi tipo di iteratore.
	 */
	public static boolean isEvenBtree(BinaryTree<Integer> btree) {
		boolean even = true;
		Iterator<Integer> iterator = btree.iteratorInOrder();
		while (iterator.hasNext() && even) {
			Integer current = iterator.next();
			if ((current <= 0) || !(current % 2 == 0)) even = false;
		}
		return even;
	}
	
	/*
	 * Esercizio 2 
	 * Realizzare il metodo statico public static Integer MaxValue(BinaryTree<Integer> btree) 
	 * che restituisce il riferimento all'oggetto intero più grande 
	 * contenuto in btree.
	 */
	/*
	 * Spiegazione, in questo caso, è necessario e sufficiente iterare tutti gli elementi per 
	 * verificare il maggiore. Non essendoci un vero ordinamento sull'albero siamo obbligati a 
	 * iterare tutti i nodi.
	 */
	public static Integer maxValue(BinaryTree<Integer> btree) {
		Iterator<Integer> iterator = btree.iteratorInOrder();
		if (!iterator.hasNext()) return null; 
		Integer maxValue = iterator.next();
		while (iterator.hasNext()) {
			Integer current = iterator.next();
			if (current > maxValue) maxValue = current;
		}
		return maxValue;
	}
	
	
	
}
