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.

  • ๐ŸŒณ Clรฉs commandรฉes : Les clรฉs du sous-arbre gauche sont plus petites et les clรฉs du sous-arbre droit sont plus grandes que celles du parent.
  • | Rapide Operation : L'ordonnancement permet d'effectuer efficacement les opรฉrations de recherche, d'insertion et de suppression en comparant les valeurs.
  • ๐Ÿ” Chercher: Une comparaison ร  chaque nล“ud รฉlimine la moitiรฉ de l'arbre, que l'on se dรฉplace vers la gauche ou vers la droite.
  • โž• Insรฉrer: Une nouvelle valeur est placรฉe ร  gauche ou ร  droite de la racine en fonction de la comparaison.
  • โž– Effacer: La suppression gรจre les nล“uds ayant zรฉro, un ou deux enfants en utilisant un prรฉdรฉcesseur ou un successeur.

Arbre de recherche binaire (BST) avec exemple

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.

Attributs de l'arbre de recherche binaire

  1. 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.
  2. Le sous-arbre droit possรจde des valeurs clรฉs supรฉrieures ร  celles du nล“ud parent.
  3. 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.

Rechercher Operaproduction

  1. L'รฉlรฉment ร  rechercher est 10.
  2. 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.
  3. Maintenant, comparez 10 avec le nล“ud 7, 10 > 7, donc dรฉplacez-vous vers le sous-arbre droit.
  4. Comparez ensuite 10 avec le nล“ud suivant, qui est 9, 10 > 9, regardez dans l'enfant du sous-arbre droit.
  5. 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.

insรฉrer Operaproduction

  1. Il existe une liste de 6 รฉlรฉments qui doivent รชtre insรฉrรฉs dans un arbre binaire de recherche, de gauche ร  droite.
  2. 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.
  3. 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รฉ.

Supprimer  Operations

  1. 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.
  2. Supprimez la valeur 19 et supprimez le lien du nล“ud.
  3. Visualisez la nouvelle structure du BST sans 19.

Supprimer  Operations

  1. 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.
  2. Supprimez le nล“ud 9 et remplacez-le par son enfant 10, et ajoutez un lien de 7 ร  10.
  3. Visualisez la nouvelle structure du BST sans 9.

Supprimer  Operations

  1. Vous allez ici supprimer le nล“ud 12 qui possรจde deux enfants.
  2. 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.
  3. Supprimez le nล“ud 12 et remplacez-le par 10, car il s'agit de la plus grande valeur du sous-arbre gauche.
  4. Visualisez la nouvelle structure du BST aprรจs la suppression de 12.

Supprimer  Operations

  1. Supprimez le nล“ud 12 qui possรจde deux enfants.
  2. 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.
  3. Supprimez le nล“ud 12 et remplacez-le par 19, car il s'agit de la plus petite valeur sur le sous-arbre droit.
  4. 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รฉ.

FAQ

Les arbres binaires de recherche (BST) et leurs variantes รฉquilibrรฉes organisent les donnรฉes ordonnรฉes sous-tendant des fonctionnalitรฉs d'IA telles que la saisie semi-automatique, les arbres de dรฉcision et la recherche rapide sur des clรฉs triรฉes. Ils optimisent la recherche, ce qui permet aux systรจmes d'IA de trouver rapidement des candidats lors de l'infรฉrence.

Oui. Les assistants IA peuvent gรฉnรฉrer du code de recherche, d'insertion et de suppression pour un arbre binaire de recherche. Python, Java, C++ ร€ partir d'une simple description, vรฉrifiez attentivement la logique de suppression, car le cas de deux enfants est facile ร  mal gรฉrer.

Les opรฉrations de recherche, d'insertion et de suppression s'exรฉcutent en O(log n) sur un arbre binaire de recherche รฉquilibrรฉ. Dans le pire des cas, un arbre dรฉsรฉquilibrรฉ se rรฉduit ร  une liste chaรฎnรฉe, ce qui rend les opรฉrations en O(n) ; c'est pourquoi on utilise souvent des arbres auto-รฉquilibrรฉs.

Un arbre binaire de recherche simple peut devenir dรฉsรฉquilibrรฉ et lent. Un arbre binaire de recherche รฉquilibrรฉ, tel qu'un arbre AVL ou un arbre rouge-noir, effectue une rotation automatique des nล“uds aprรจs insertion ou suppression afin de maintenir une hauteur rรฉduite, garantissant ainsi un temps d'exรฉcution de O(log n).

Rรฉsumez cet article avec :