def supprime_minimum(a):
    """supprime le plus petit élément de a
       suppose a non vide"""
    assert a is not None
    if a.gauche is None:
        # la racine est le minimum
        return a.droit
    return Noeud(supprime_minimum(a.gauche),a.valeur,a.droit)

def supprime(x, a):
    """supprime une occurrence de x dans a"""
    if a is None:
        return None
    if x < a.valeur:
        return Noeud(supprime(x,a.gauche),a.valeur,a.droit)
    elif x > a.valeur:
        return Noeud(a.gauche,a.valeur,supprime(x,a.droit))
    # il faut supprimer la racine
    elif a.droit is None:
        return a.gauche
    else:
        return Noeud(a.gauche, minimum(a.droit), \
                     supprime_minimum(a.droit))