Maison >interface Web >js tutoriel >Explication détaillée de l'arbre binaire des structures de données et des algorithmes JavaScript_Connaissances de base
Le concept d'arbre binaire
L'arbre binaire est un ensemble fini de n (n>=0) nœuds. L'ensemble est soit un ensemble vide (arbre binaire vide), soit il se compose d'un nœud racine et de deux arbres mutuellement disjoints. composé du sous-arbre gauche et du sous-arbre droit du nœud racine.
Caractéristiques des arbres binaires
Chaque nœud a au plus deux sous-arbres, il n'y a donc aucun nœud avec un degré supérieur à 2 dans l'arbre binaire. Chaque nœud de l'arborescence binaire est un objet et chaque nœud de données possède trois pointeurs, qui sont des pointeurs vers le parent, l'enfant de gauche et l'enfant de droite. Chaque nœud est connecté les uns aux autres via des pointeurs. La relation entre les pointeurs connectés est une relation parent-enfant.
Définition du nœud d'arbre binaire
Les nœuds de l'arbre binaire sont définis comme suit :
Cinq formes de base d'arbres binaires
Arbre binaire vide
Il n'y a qu'un seul nœud racine
Le nœud racine n'a que le sous-arbre gauche
Le nœud racine n'a que le bon sous-arbre
Le nœud racine a des sous-arbres gauche et droit
Il n'y a que deux situations pour un arbre ordinaire à trois nœuds : deux couches ou trois couches. Mais comme l'arbre binaire doit distinguer la gauche et la droite, il évoluera vers les cinq formes suivantes :
Arbre binaire spécial
Arbre incliné
Comme le montrent les 2ème et 3ème images de la dernière photo ci-dessus.
Arbre binaire complet
Dans un arbre binaire, si tous les nœuds de branche ont des sous-arbres gauche et droit, et que toutes les feuilles sont au même niveau, un tel arbre binaire est appelé un arbre binaire complet. Comme indiqué ci-dessous :
Arbre binaire complet
Un arbre binaire complet signifie que le côté gauche du dernier niveau est plein, le côté droit peut être plein ou non, puis les niveaux restants sont pleins. Un arbre binaire de profondeur k et de nombre de nœuds 2 ^ k - 1 est un arbre binaire complet (arbre binaire complet). C'est un arbre de profondeur k et sans trou.
Les caractéristiques d'un arbre binaire complet sont :
Les nœuds feuilles ne peuvent apparaître que sur les deux niveaux inférieurs.
Les feuilles les plus basses doivent être concentrées sur la position continue gauche.
Sur l'avant-dernière couche, s'il y a des nœuds feuilles, ils doivent être dans des positions continues à droite.
Si le degré du nœud est 1, alors le nœud n'a laissé qu'un enfant.
Un arbre binaire avec le même arbre de nœuds, un arbre binaire complet a la plus petite profondeur.
Remarque : un arbre binaire complet doit être un arbre binaire complet, mais un arbre binaire complet n'est pas nécessairement un arbre binaire complet.
L'algorithme est le suivant :
{
ptr = q.pop();
// S'il y a des nœuds non NULL non visités, l'arbre a des trous et est un arbre binaire non complet
return false ;
}
renvoie vrai ;
}
Propriétés des arbres binaires
Propriété 1 d'un arbre binaire : Il y a au plus 2^(i-1) nœuds (i>=1) au i-ème niveau de l'arbre binaire
Propriété 2 des arbres binaires : Un arbre binaire de profondeur k a au plus 2^k-1 nœuds (k>=1)
Structure de stockage séquentielle de l'arbre binaire
La structure de stockage séquentielle d'un arbre binaire utilise un tableau unidimensionnel pour stocker chaque nœud dans l'arbre binaire, et l'emplacement de stockage des nœuds peut refléter la relation logique entre les nœuds.
Liste chaînée binaire
Étant donné que l'applicabilité du stockage séquentiel n'est pas forte, nous devons considérer la structure de stockage en chaîne. Selon la pratique internationale, le stockage des arbres binaires utilise généralement une structure de stockage en chaîne.
Chaque nœud d'un arbre binaire a au plus deux enfants, c'est donc une idée naturelle de concevoir un champ de données et deux champs de pointeur pour celui-ci. Nous appelons une telle liste chaînée une liste chaînée binaire.
Parcours d'arbre binaire
Parcourir un arbre binaire signifie partir du nœud racine et visiter tous les nœuds de l'arbre binaire dans un certain ordre afin que chaque nœud soit visité une et une seule fois.
Il existe trois façons de parcourir un arbre binaire, comme suit :
(1) Traversée de précommande (DLR), visitez d'abord le nœud racine, puis traversez le sous-arbre de gauche et enfin traversez le sous-arbre de droite. L'abréviation racine-gauche-droite.
(2) Le parcours dans l'ordre (LDR), traverse d'abord le sous-arbre de gauche, puis visite le nœud racine et traverse enfin le sous-arbre de droite. Abrégé en gauche-racine-droite.
(3) Le parcours post-ordre (LRD), traverse d'abord le sous-arbre gauche, puis traverse le sous-arbre droit et visite enfin le nœud racine. Abrégé en racine gauche-droite.
Parcours des précommandes :
Si l'arbre binaire est vide, aucune opération n'est renvoyée, sinon le nœud racine est visité en premier, puis le sous-arbre de gauche est parcouru en pré-ordre, puis le sous-arbre de droite est parcouru en pré-ordre.
L'ordre de parcours est : A B D H I E J C F K G
Parcours dans l'ordre :
Si l'arbre est vide, aucune opération ne revient, sinon en partant du nœud racine (notez que le nœud racine n'est pas visité en premier), parcourez le sous-arbre gauche du nœud racine dans l'ordre, puis visitez le nœud racine, et enfin Parcourez le sous-arbre de droite dans l'ordre.
L'ordre de parcours est : H D I B E J A F K C G
Parcours post-commande :
Si l'arbre est vide, l'opération sans opération revient, sinon les sous-arbres gauche et droit sont parcourus de gauche à droite, d'abord les feuilles puis les nœuds, et enfin le nœud racine est visité.
L'ordre de parcours est : H I D J E B K F G C A
Implémenter un arbre de recherche binaire
L'arbre de recherche binaire (BST) est composé de nœuds, nous définissons donc un objet nœud Node comme suit :
fonction show(){
Renvoie this.data;//Affiche les données enregistrées dans le nœud
>
Trouver les valeurs maximales et minimales
Trouver les valeurs minimales et maximales sur un BST est très simple car la plus petite valeur est toujours sur le nœud enfant de gauche. Pour trouver la valeur minimale sur un BST, parcourez simplement le sous-arbre de gauche jusqu'à ce que le dernier nœud soit trouvé. 🎜>
Trouver la valeur minimale
Trouver la valeur maximale
Trouver la valeur maximale sur BST nécessite uniquement de parcourir le sous-arbre droit jusqu'à ce que le dernier nœud soit trouvé, et la valeur enregistrée sur ce nœud est la valeur maximale.