package fr.eisti.arbre.test;

import java.util.*;
import java.io.Serializable;

import fr.eisti.arbre.*;


public class TestArbreInteger {

	// pour debugger et vérifier que le parcours est cohérent avec la structure
	private static <V extends Comparable<V>&Serializable> void afficher(Arbre<V> arbre) {
		System.out.println(arbre.getValeur());
		if (arbre.aFilsGauche()) {
			System.out.println("G");
			afficher(arbre.getFilsGauche());
			System.out.println("Up");
		}
		if (arbre.aFilsDroit()) {
			System.out.println("D");
			afficher(arbre.getFilsDroit());
			System.out.println("Up");
		}
	}

	public static void main(String[] args) {
		int nombre;
		try {
			nombre = Integer.parseInt(args[0]);
		} catch (Exception e) {
			// s'il y a un problème de conversion ou de nombre d'arguments
			// on fixe le nombre d'éléments à 10
			nombre = 10;
		}
		List<Integer> liste = new LinkedList<Integer>();
		for (int i=0; i<nombre; i++) {
			liste.add(i);
		}
		Collections.shuffle(liste);
		Arbre<Integer> arbre = new Arbre<Integer>(liste.remove(0));
		for (Integer i : liste) {
			arbre.ajouter(i);
		}
		// pour debugger
		afficher(arbre);
		//
		System.out.println("----------------------");
		for (Integer i : arbre) {
			System.out.print(i + " ");
		}
		System.out.println();
	}
}
		