
public class Arbre {
	private Noeud racine;
	public Arbre() {
		this.racine = null;
	}

	public Arbre(Noeud n) {
		this.racine = n;
	}

	public void bourgeons() {
		if(this.racine == null) {
			return;
		}
		this.racine.bourgeons();
	}

	public void elagage() {
		if(this.racine == null) {
			return;
		}
		else if(this.racine.getGauche() == null && this.racine.getDroit() == null) {
			this.racine = null;
		}
		else {
			this.racine.elagage();
		}
	}

	public void croissance() {
		if(this.racine == null) {
			return;
		}
		else {
			this.racine.croissance();
		}
	}

	public void decroissance() {
		if(this.racine == null) {
			return;
		}
		else {
			this.racine.decroissance();
		}
	}

	public Arbre sousArbre(String chemin) {
		if(this.racine == null) {
			return null;
		}
		return new Arbre(this.racine.sousArbre(chemin));
	}

	public void greffe(Arbre a, String chemin) {
		String avantDernier = chemin.substring(0, chemin.length() - 1);
		char dernier = chemin.charAt(avantDernier.length() - 1);
		Arbre aGreffer = this.sousArbre(avantDernier);
		if(aGreffer == null) {
			return;
		}
		if(dernier == 'g' && aGreffer.racine.getGauche() != null) {
			aGreffer.racine.setGauche(a.racine);
			return;
		}
		if(dernier == 'd' && aGreffer.racine.getDroit() != null) {
			aGreffer.racine.setDroit(a.racine);
			return;
		}
		return;
	}

	public void echange(String chemin1, String chemin2) {
		Arbre a1 =this.sousArbre(chemin1);
		Arbre a2 =this.sousArbre(chemin2);
		if(a1 == null || a2 == null) {
			return;
		}
		this.greffe(a2, chemin1);
		this.greffe(a1, chemin2);
		return;
	}
}
