Maison développement back-end Problème PHP Comment implémenter un arbre binaire en php (exemple de code)

Comment implémenter un arbre binaire en php (exemple de code)

Apr 10, 2023 am 09:43 AM

L'arbre binaire est une structure de données de base en informatique, c'est la structure arborescente la plus courante, telle que celle utilisée en informatique pour la recherche et le tri, et utilisée dans de nombreux autres domaines de l'informatique. PHP est un langage de script côté serveur largement utilisé qui prend en charge le développement Web dynamique. Dans cet article, nous présenterons comment implémenter un arbre binaire en utilisant PHP.

Qu'est-ce qu'un arbre binaire ?

Un arbre binaire est composé de plusieurs nœuds, chaque nœud a au plus deux nœuds enfants. Il possède trois attributs :

  • Valeur du nœud
  • Pointeur de sous-arbre gauche
  • Pointeur de sous-arbre droit

Les arbres binaires sont divisés dans les catégories suivantes :

  • Arbre binaire complet : à l'exception des nœuds feuilles, les autres nœuds ont deux nœuds enfants.
  • Arbre binaire complet : si la profondeur de l'arbre binaire est d, à l'exception du niveau dième, tous les autres niveaux sont pleins, et au niveau dième, tous les nœuds feuilles sont à des positions consécutives sur la gauche
  • Arbre de recherche binaire : sous-arbre gauche Tous les nœuds sont inférieurs à la valeur du nœud racine et toutes les valeurs des nœuds du sous-arbre droit sont supérieures à la valeur du nœud racine

Pour implémenter un arbre binaire

Nous pouvons utiliser des classes pour définir la structure de l'arbre binaire. Chaque nœud est un objet avec les propriétés suivantes :

  • value : valeur du nœud
  • gauche : pointeur de sous-arbre gauche
  • droite : pointeur de sous-arbre droit

Créez une classe pour représenter le nœud.

class Node {
    public $value;
    public $left;
    public $right;
    function __construct($value){
        $this -> value = $value;
        $this -> left = null;
        $this -> right = null;
    }
}
Copier après la connexion

Ensuite, nous devons créer une classe pour représenter l'arbre binaire.

class BinarySearchTree {
    public $root;
    function __construct() {
        $this -> root = null;
    }
}
Copier après la connexion

Ensuite, nous définirons les méthodes suivantes pour les arbres binaires :

  • insert(value) : Insérer une valeur dans un arbre binaire
  • search(value) : Rechercher une valeur dans un arbre binaire
  • delete(value) : Supprimer une valeur d'un arbre binaire

Insérer un nœud

La méthode Insérer un nœud insérera le nouveau nœud au bon emplacement. Si l'arborescence est vide, le nouveau nœud est le nœud racine. Sinon, nous commençons à comparer la valeur du nœud actuel à partir du nœud racine.

  • Si la valeur du nouveau nœud est inférieure à la valeur du nœud actuel, alors nous insérons le nouveau nœud dans le sous-arbre de gauche.
  • Si la valeur du nouveau nœud est supérieure à la valeur du nœud actuel, alors nous insérons le nouveau nœud dans le sous-arbre de droite.
  • Si la valeur du nouveau nœud est égale à la valeur du nœud actuel, le nœud existe déjà et n'a pas besoin d'être inséré.

Voici le code de la méthode d'insertion :

function insert($value) {
    $newNode = new Node($value);
    if ($this -> root == null) {
        $this -> root = $newNode;
    } else {
        $current = $this -> root;
        while (true) {
            if ($value < $current -> value) {
                if ($current -> left == null) {
                    $current -> left = $newNode;
                    return;
                } else {
                    $current = $current -> left;
                }
            } else if ($value > $current -> value) {
                if ($current -> right == null) {
                    $current -> right = $newNode;
                    return;
                } else {
                    $current = $current -> right;
                }
            } else {
                return;
            }
        }
    }
}
Copier après la connexion

Find Node

La méthode Find Node est une méthode récursive simple. Comparez les valeurs des nœuds en commençant par le nœud racine. Si les valeurs sont égales, renvoie le nœud actuel. Sinon, si la valeur du nœud est inférieure à la valeur que vous recherchez, continuez la recherche dans le sous-arbre de gauche. Si la valeur est supérieure à la valeur que vous recherchez, poursuivez la recherche dans le sous-arbre de droite.

Voici le code de la méthode find :

function search($value) {
    $current = $this -> root;
    while ($current != null) {
        if ($value == $current -> value) {
            return $current;
        } else if ($value < $current -> value) {
            $current = $current -> left;
        } else {
            $current = $current -> right;
        }
    }
    return null;
}
Copier après la connexion

Delete Node

La méthode delete node est l'une des méthodes les plus complexes de toute l'implémentation. La manière dont un nœud est supprimé dépend du nombre d’enfants du nœud. Il peut y avoir les situations suivantes :

  • Le nœud est un nœud feuille et n'a pas de nœud enfant. Supprimez le nœud directement. Le nœud
  • n’a qu’un seul nœud enfant. Remplacez les nœuds enfants par ce nœud. Le nœud
  • a deux nœuds enfants. Recherchez la valeur minimale dans le sous-arbre droit du nœud, remplacez la valeur minimale par ce nœud et supprimez la valeur minimale du sous-arbre droit.

Voici le code de la méthode delete :

function delete($value) {
    $current = $this -> root;
    $parent = null;
    while ($current != null) {
        if ($value == $current -> value) {
            if ($current -> left == null && $current -> right == null) {
                if ($parent == null) {
                    $this -> root = null;
                } else {
                    if ($parent -> left == $current) {
                        $parent -> left = null;
                    } else {
                        $parent -> right = null;
                    }
                }
            } else if ($current -> left == null) {
                if ($parent == null) {
                    $this -> root = $current -> right;
                } else {
                    if ($parent -> left == $current) {
                        $parent -> left = $current -> right;
                    } else {
                        $parent -> right = $current -> right;
                    }
                }
            } else if ($current -> right == null) {
                if ($parent == null) {
                    $this -> root = $current -> left;
                } else {
                    if ($parent -> left == $current) {
                        $parent -> left = $current -> left;
                    } else {
                        $parent -> right = $current -> left;
                    }
                }
            } else {
                $replacementNode = $current -> right;
                while ($replacementNode -> left != null) {
                    $replacementNode = $replacementNode -> left;
                }
                $removeValue = $replacementNode -> value;
                $this -> delete($replacementNode -> value);
                $current -> value = $removeValue;
            }
            return;
        } else if ($value < $current -> value) {
            $parent = $current;
            $current = $current -> left;
        } else {
            $parent = $current;
            $current = $current -> right;
        }
    }
}
Copier après la connexion

Conclusion

Maintenant, nous avons appris comment implémenter un arbre binaire en php. Les arbres binaires constituent une structure de données de base en informatique et de nombreux algorithmes et applications l'impliquent. Nous avons appris à insérer des nœuds, à rechercher des nœuds et à supprimer des nœuds. Nous pouvons également étendre cette classe pour implémenter d’autres méthodes pratiques.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

PHP 8 JIT (juste à temps) Compilation: comment cela améliore les performances. PHP 8 JIT (juste à temps) Compilation: comment cela améliore les performances. Mar 25, 2025 am 10:37 AM

La compilation JIT de PHP 8 améliore les performances en compilant le code fréquemment exécuté en code machine, bénéficiant aux applications avec des calculs lourds et en réduisant les temps d'exécution.

Téléchargements de fichiers sécurisés PHP: prévention des vulnérabilités liées au fichier. Téléchargements de fichiers sécurisés PHP: prévention des vulnérabilités liées au fichier. Mar 26, 2025 pm 04:18 PM

L'article traite de la sécurisation des téléchargements de fichiers PHP pour éviter les vulnérabilités comme l'injection de code. Il se concentre sur la validation du type de fichier, le stockage sécurisé et la gestion des erreurs pour améliorer la sécurité de l'application.

OWASP Top 10 PHP: Décrivez et atténue les vulnérabilités communes. OWASP Top 10 PHP: Décrivez et atténue les vulnérabilités communes. Mar 26, 2025 pm 04:13 PM

L'article traite des 10 meilleures vulnérabilités de l'OWASP dans les stratégies PHP et d'atténuation. Les problèmes clés incluent l'injection, l'authentification brisée et les XS, avec des outils recommandés pour surveiller et sécuriser les applications PHP.

Encryption PHP: cryptage symétrique vs asymétrique. Encryption PHP: cryptage symétrique vs asymétrique. Mar 25, 2025 pm 03:12 PM

L'article traite du cryptage symétrique et asymétrique en PHP, en comparant leur aptitude, leurs performances et leurs différences de sécurité. Le chiffrement symétrique est plus rapide et adapté aux données en vrac, tandis que l'asymétrique est utilisé pour l'échange de clés sécurisé.

Comment récupérer les données d'une base de données à l'aide de PHP? Comment récupérer les données d'une base de données à l'aide de PHP? Mar 20, 2025 pm 04:57 PM

L'article discute de la récupération des données des bases de données à l'aide de PHP, couvrant les étapes, les mesures de sécurité, les techniques d'optimisation et les erreurs communes avec des solutions. COMMANDE CHAPITRE: 159

Authentification PHP & amp; Autorisation: mise en œuvre sécurisée. Authentification PHP & amp; Autorisation: mise en œuvre sécurisée. Mar 25, 2025 pm 03:06 PM

L'article examine la mise en œuvre d'authentification et d'autorisation robustes dans PHP pour empêcher un accès non autorisé, détaillant les meilleures pratiques et recommandant des outils d'amélioration de la sécurité.

Quel est le but des déclarations préparées en PHP? Quel est le but des déclarations préparées en PHP? Mar 20, 2025 pm 04:47 PM

Les déclarations préparées dans PHP améliorent la sécurité et l'efficacité de la base de données en empêchant l'injection SQL et en améliorant les performances de la requête par compilation et réutilisation. Compilation de caractéristiques: 159

Limitation du taux de l'API PHP: stratégies de mise en œuvre. Limitation du taux de l'API PHP: stratégies de mise en œuvre. Mar 26, 2025 pm 04:16 PM

L'article traite des stratégies de mise en œuvre de la limitation du taux d'API en PHP, y compris des algorithmes comme un godet de jeton et un seau qui fuit, et en utilisant des bibliothèques comme Symfony / Rate-Limiter. Il couvre également la surveillance, l'ajustement dynamiquement des limites de taux et la main

See all articles