Supprimer un noeud de l'arbre binaire de recherche
Lorsque nous supprimons un noeud, trois possibilités se présentent.
Feuille
Le noeud à supprimer est une feuille, il est terminal et il suffit de le retirer de l'arbre.

Le noeud a un fils unique
Le nœud à supprimer n'a qu'un seul enfant, on relie son fils à son père et on supprime le nœud .

Le noeud à supprimer a deux enfants
L’élément à supprimer a deux fils : on le remplace par son successeur qui est toujours le minimum de ses descendants droits.
Notez que le prédécesseur peut également être utilisé (nœud de clé maximum dans le sous-arbre gauche du nœud).

class Noeud:
def __init__(self, key):
self.gauche = None
self.droit = None
self.val = key
def Successeur(noeud):
courant = noeud
while(courant.gauche is not None):
courant = courant.gauche
return courant
def Predecesseur(noeud):
courant = noeud
while(courant.droit is not None):
courant = courant.droit
return courant
def Supprimer(noeud, cle):
if noeud is None:
return
# si cle est inférieure à la valeur du noeud, rechercher dans le sous-arbre gauche
if cle < noeud.val:
noeud.gauche = Supprimer(noeud.gauche, cle)
# si cle est supérieure à la valeur du noeud, rechercher dans le sous-arbre droit
elif(cle > noeud.val):
noeud.droit = Supprimer(noeud.droit, cle)
# sinon
else:
# noeud a un fils unique
if noeud.gauche is None:
temp = noeud.droit
noeud = None
return temp
elif noeud.droit is None:
temp = noeud.gauche
noeud = None
return temp
# noeud a deux enfants
succ = Successeur(noeud.droit)
# le cas de prédécesseur
# pred=Predecesseur(noeud.gauche)
# remplacer la valeur du noeud à supprimer avec la valeur du successeur
noeud.val = succ.val
# supprimer le successeur
noeud.droit = Supprimer(noeud.droit, succ.val)
# le cas de prédecesseur
#noeud.gauche = Supprimer(noeud.gauche, succ.val)
return noeud
# parcours infixe
def infixe(noeud):
if noeud == None:
return
if noeud.gauche != None:
infixe(noeud.gauche)
print(noeud.val)
if noeud.droit != None:
infixe(noeud.droit)
def inserer(noeud, val):
if noeud is None:
noeud = Noeud(val)
else:
if noeud.val < val:
if noeud.droit is None:
noeud.droit = Noeud(val)
else:
inserer(noeud.droit, val)
else:
if noeud.gauche is None:
noeud.gauche = Noeud(val)
else:
inserer(noeud.gauche, val)
racine = Noeud(9)
inserer(racine, 5)
inserer(racine, 11)
inserer(racine, 3)
inserer(racine, 4)
inserer(racine, 7)
inserer(racine, 8)
inserer(racine, 6)
racine = Supprimer(racine, 5)
infixe(racine)
Partager ce cours avec tes amis :
Rédigé par
ESSADDOUKI
Mostafa
The education of the 21st century opens up opportunities to not merely teach, but to coach, mentor, nurture and inspire.
