Arbre de recherche binaire (BST) avec exemple
โก Rรฉsumรฉ intelligent
Un arbre binaire de recherche (ABR) est un arbre dont le sous-arbre gauche contient les clรฉs les plus courtes et le sous-arbre droit les clรฉs les plus longues, ce qui permet des opรฉrations de recherche, d'insertion et de suppression rapides. Cet article prรฉsente les attributs, les types, les opรฉrations et le pseudo-code des ABR.
Quโest-ce quโun arbre de recherche binaire ?
L'arbre binaire de recherche (ABR) est un algorithme avancรฉ permettant d'analyser un nลud, ses branches gauche et droite (reprรฉsentรฉes sous forme d'arbre) et d'en renvoyer la valeur. L'ABR est conรงu sur le modรจle d'un algorithme de recherche binaire classique ; il permet ainsi des recherches, des insertions et des suppressions de nลuds plus rapides. Le programme s'en trouve ainsi particuliรจrement performant et prรฉcis.
Attributs de l'arbre de recherche binaire
Un BST est composรฉ de plusieurs nลuds et se compose des attributs suivants :
- Les nลuds de l'arbre sont reprรฉsentรฉs selon une relation parent-enfant.
- Chaque nลud parent peut avoir zรฉro nลud enfant ou un maximum de deux sous-nลuds ou sous-arbres sur les cรดtรฉs gauche et droit.
- Chaque sous-arbre, รฉgalement appelรฉ arbre de recherche binaire, possรจde des sous-branches ร droite et ร gauche.
- Tous les nลuds sont liรฉs par des paires clรฉ-valeur.
- Les clรฉs des nลuds prรฉsents sur le sous-arbre gauche sont plus courtes que les clรฉs de leur nลud parent.
- De mรชme, les clรฉs des nลuds prรฉsents sur le sous-arbre droit sont supรฉrieures aux clรฉs de leur nลud parent.
- Il y a le nลud principal ou niveau parent 11. En dessous, il y a des nลuds/branches gauche et droite avec leurs propres valeurs clรฉs.
- Le sous-arbre droit possรจde des valeurs clรฉs supรฉrieures ร celles du nลud parent.
- Le sous-arbre gauche possรจde des valeurs clรฉs infรฉrieures ร celles du nลud parent.
Pourquoi avons-nous besoin dโun arbre de recherche binaire ?
- Les deux principaux facteurs qui font d'un arbre de recherche binaire une solution optimale ร tout problรจme du monde rรฉel sont la vitesse et la prรฉcision.
- Du fait que la recherche binaire se fait sous la forme d'une branche avec des relations parent-enfant, l'algorithme sait ร quel endroit de l'arborescence les รฉlรฉments doivent รชtre recherchรฉs. Cela rรฉduit le nombre de comparaisons clรฉ-valeur que le programme doit effectuer pour localiser l'รฉlรฉment souhaitรฉ.
- De plus, si l'รฉlรฉment recherchรฉ est supรฉrieur ou infรฉrieur au nลud parent, le nลud sait de quel cรดtรฉ de l'arbre effectuer la recherche. En effet, le sous-arbre gauche contient toujours des valeurs infรฉrieures ร celles du nลud parent, tandis que le sous-arbre droit contient toujours des valeurs supรฉrieures ou รฉgales ร celles du nลud parent.
- BST est couramment utilisรฉ pour mettre en ลuvre des recherches complexes, des logiques de jeu robustes, des activitรฉs de saisie semi-automatique et des graphiques.
- L'algorithme prend en charge efficacement des opรฉrations telles que la recherche, l'insertion et la suppression.
Types d'arbres binaires
Il existe trois types d'arbres binaires :
- Arbre binaire complet : Tous les niveaux de l'arbre sont saturรฉs, ร l'exception possible du dernier niveau. De mรชme, tous les nลuds sont saturรฉs, pointant vers l'extrรชme gauche.
- Arbre binaire complet : Tous les nลuds ont 2 nลuds enfants, sauf la feuille.
- Arbre binaire รฉquilibrรฉ ou parfait : Dans l'arbre, chaque nลud possรจde deux enfants. De plus, chaque sous-nลud est au mรชme niveau.
En savoir plus sur le Arbre binaire dans la structure des donnรฉes Si tu es intรฉressรฉ.
Comment fonctionne lโarbre de recherche binaire ?
L'arborescence a toujours un nลud racine et d'autres nลuds enfants, que ce soit ร gauche ou ร droite. L'algorithme effectue toutes les opรฉrations en comparant les valeurs avec la racine et ses autres nลuds enfants dans le sous-arbre gauche ou droit en consรฉquence.
Selon l'รฉlรฉment ร insรฉrer, ร rechercher ou ร supprimer, aprรจs la comparaison, l'algorithme peut facilement supprimer le sous-arbre gauche ou droit du nลud racine.
BST propose principalement les trois types d'opรฉrations suivants pour votre utilisation :
- Chercher: recherche l'รฉlรฉment dans l'arbre binaire.
- Insรฉrer: ajoute un รฉlรฉment ร l'arbre binaire.
- Effacer: supprime l'รฉlรฉment d'un arbre binaire.
Chaque opรฉration a sa propre structure et mรฉthode dโexรฉcution/analyse, mais la plus complexe de toutes est lโopรฉration Supprimer.
Rechercher Operaproduction
Il faut toujours commencer l'analyse de l'arbre par le nลud racine, puis se dรฉplacer vers le sous-arbre droit ou gauche de ce nลud, selon que l'รฉlรฉment ร localiser est infรฉrieur ou supรฉrieur ร la racine.
- L'รฉlรฉment ร rechercher est 10.
- Comparez l'รฉlรฉment avec le nลud racine 12 ; 10 < 12, vous passez donc au sous-arbre gauche. Il est inutile d'analyser le sous-arbre droit.
- Maintenant, comparez 10 avec le nลud 7, 10 > 7, donc dรฉplacez-vous vers le sous-arbre droit.
- Comparez ensuite 10 avec le nลud suivant, qui est 9, 10 > 9, regardez dans l'enfant du sous-arbre droit.
- 10 correspond ร la valeur dans le nลud, 10 = 10, renvoie la valeur ร l'utilisateur.
Faux Code pour la recherche dans BST
search(element, root)
if !root
return -1
if root.value == element
return 1
if root.value < element
search(element, root.right)
else
search(element, root.left)
insรฉrer Operaproduction
Il s'agit d'une opรฉration trรจs simple. On insรจre d'abord le nลud racine, puis on compare la valeur suivante ร celle du nลud racine. Si la valeur est supรฉrieure ร celle de la racine, elle est ajoutรฉe au sous-arbre droit ; si elle est infรฉrieure, elle est ajoutรฉe au sous-arbre gauche.
- Il existe une liste de 6 รฉlรฉments qui doivent รชtre insรฉrรฉs dans un arbre binaire de recherche, de gauche ร droite.
- Insรฉrez 12 comme nลud racine et comparez les valeurs suivantes 7 et 9 pour les insรฉrer en consรฉquence dans le sous-arbre droit et gauche.
- Comparez les valeurs restantes 19, 5 et 10 avec le nลud racine 12 et placez-les en consรฉquence. 19 > 12, placez-le comme enfant droit de 12 ; 5 < 12 et 5 < 7, placez-le donc comme enfant gauche de 7. Comparez maintenant 10 : 10 < 12, 10 > 7 et 10 > 9, placez 10 comme sous-arbre droit de 9.
Pseudocode pour l'insertion d'un nลud dans BST
insert (element, root)
Node x = root
Node y = NULL
while x:
y = x
if x.value < element.value
x = x.right
else
x = x.left
if y.value < element
y.right = element
else
y.left = element
Supprimer Operations
Lorsqu'on supprime un nลud d'un arbre binaire de recherche (BST), il existe plusieurs cas : la suppression de la racine ou celle d'une feuille. Aprรจs la suppression de la racine, il convient รฉgalement de prendre en compte le nลud racine lui-mรชme.
Supposons que nous voulions supprimer un nลud feuille, nous pouvons simplement le supprimer, mais si nous voulons supprimer une racine, nous devons remplacer la valeur de la racine par un autre nลud. Prenons l'exemple suivant :
- Cas 1 โ Nลud sans enfant : C'est le cas le plus simple : il suffit de supprimer le nลud qui n'a plus d'enfants ร droite ni ร gauche.
- Cas 2 โ Nลud avec un enfant : Une fois le nลud supprimรฉ, il suffit de connecter son nลud enfant au nลud parent de la valeur supprimรฉe.
- Cas 3 โ Nลud avec deux enfants : Il s'agit de la situation la plus difficile, et elle repose sur les deux rรจgles suivantes :
- 3a โ Antรฉcรฉdent dans l'ordre : Vous devez supprimer le nลud ayant deux enfants et le remplacer par la plus grande valeur du sous-arbre gauche du nลud supprimรฉ.
- 3b โ Successeur en ordre : Vous devez supprimer le nลud ayant deux enfants et le remplacer par la plus petite valeur du sous-arbre droit du nลud supprimรฉ.
- Il s'agit du premier cas de suppression, oรน l'on supprime un nลud sans enfant. Comme vous pouvez le voir sur le schรฉma, les nลuds 19, 10 et 5 n'ont pas d'enfant. Nous allons donc supprimer le nลud 19.
- Supprimez la valeur 19 et supprimez le lien du nลud.
- Visualisez la nouvelle structure du BST sans 19.
- Il s'agit du deuxiรจme cas de suppression, oรน vous supprimez un nลud qui possรจde un seul enfant. Comme vous pouvez le voir sur le diagramme, le nลud 9 possรจde un seul enfant.
- Supprimez le nลud 9 et remplacez-le par son enfant 10, et ajoutez un lien de 7 ร 10.
- Visualisez la nouvelle structure du BST sans 9.
- Vous allez ici supprimer le nลud 12 qui possรจde deux enfants.
- La suppression du nลud s'effectuera selon la rรจgle du prรฉdรฉcesseur en ordre, ce qui signifie que le plus grand รฉlรฉment du sous-arbre gauche de 12 le remplacera.
- Supprimez le nลud 12 et remplacez-le par 10, car il s'agit de la plus grande valeur du sous-arbre gauche.
- Visualisez la nouvelle structure du BST aprรจs la suppression de 12.
- Supprimez le nลud 12 qui possรจde deux enfants.
- La suppression du nลud s'effectuera selon la rรจgle du successeur en ordre, ce qui signifie que le plus petit รฉlรฉment du sous-arbre droit de 12 le remplacera.
- Supprimez le nลud 12 et remplacez-le par 19, car il s'agit de la plus petite valeur sur le sous-arbre droit.
- Visualisez la nouvelle structure du BST aprรจs la suppression de 12.
Faux Code pour supprimer un nลud
delete (value, root):
Node x = root
Node y = NULL
# searching the node
while x:
y = x
if x.value < value
x = x.right
else if x.value > value
x = x.left
else if value == x
break
# if the node is not null, then replace it with successor
if y.left or y.right:
newNode = GetInOrderSuccessor(y)
root.value = newNode.value
# after copying the value of successor, delete the successor
free(newNode)
else
free(y)
Conditions importantes
- Insรฉrer: Insรจre un รฉlรฉment dans un arbre / crรฉe un arbre.
- Chercher: Recherche un รฉlรฉment dans un arbre.
- Parcours prรฉ-ordre : Parcourt un arbre en suivant un ordre prรฉfixe.
- Parcours infixe : Parcourt un arbre de maniรจre sรฉquentielle.
- Parcours post-ordre : Parcourt un arbre en suivant l'ordre indiquรฉ.








