Pour définir une fonction qui vérifie si un arbre est parfaitement équilibré ou non, vous pouvez visiter qu'une seule fois l'arbre avec un algorithme donné dans le pseudo-code suivant (je ne connais pas assez la syntaxe de Python pour écrire un code explicite):
isBalanced(tree):
if tree is null
then return the tuple (true, 0)
else be (bal1, lev1) the result of calling isBalanced on the left child of tree
and be (bal2, lev2) the result of calling isBalanced on the rigth child of tree
if (bal1 is false) or (bal2 is false)
then exit from the function with the tuple (false, 0)
else if lev1 = lev2
then return the tuple (true, 1+lev1)
else exit from the function with the tuple (false, 0)
Fondamentalement, l'algorithme rend visite l'arbre calcul récursive si un sous-arbre est équilibré ou non, et, au cas où il est équilibré, la profondeur de l'arbre. La commande "quitter la fonction" devrait provoquer la sortie immédiate de tous les appels récursifs de la fonction, si cela est possible en Python, sinon c'est simplement un retour de l'appel en cours avec le n-uplet spécifié.
Bien entendu, à la fin de la fonction, seul le premier composant du tuple (l'information sur l'équilibre) est utile.
Si vous voulez vérifier si un arbre est équilibré avec au plus une différence de 1 sur la profondeur des feuilles, vous pouvez étendre cette solution en retournant un tuple à trois éléments (équilibré, profondeur minimale, profondeur maximale), et vérifier dans le cas général si les profondeurs (minimum et maximum) des enfants sont cohérentes (et ensuite retourner le minimum et le maximum actuels).
le code ne signifie pas fusion que ce sera plus efficace. – erip