public static ArrayList<Arbre> residuels(Arbre a){
		ArrayList<Arbre> all = new ArrayList<Arbre>();
		Stack<Arbre> pile = new Stack<Arbre>();
		Set<Character> alphabet = a.alphabet();
		
		pile.push(a);
		all.add(a);
		a.estResiduelInit = true;
		
		while(!pile.empty()){
			Arbre depile = pile.pop();
			depile.residuels = new HashMap<Character, Arbre>();
			for(Character c : alphabet){
				Arbre res = depile.residuel(c.charValue());
				depile.residuels.put(c, res);
				if(res != null){
					boolean test = false;
					for(Arbre k : all){
						if(k.egale(res) && k.estResiduelTerm == res.estResiduelTerm){
							test = true;
							break;
						}
					}
					if(!test){
						pile.push(res);
						all.add(res);
					}
				}
			}
		}
		return all;
	}