Définissez d'abord un arbre binaire de recherche, le code Java s'exprime comme suit :
public class BST<Key extend Comparable<Key>, Value> { // Les nœuds de l'arbre sont des classes privées, le monde extérieur n'a pas besoin de comprendre l'implémentation spécifique des nœuds binaires de l'arbre de recherche private class Node { private Key key; private Value value ; private Node left, right ; public Node(Key key, Value value) { this.key = key ; this.value = value ; left = right = null ; } } // le nœud racine private Node root ; // le nombre de nœuds dans l'arbre private int count; // constructeur, construit un arbre de recherche binaire vide par défaut public BST() { root = null; count = 0; } // renvoie le nombre de nœuds dans l'arbre de recherche binaire
public int size() { return count; } // Retourne si l'arbre de recherche binaire est vide public boolean isEmpty() { return count == 0; } }
Node représente le nœud et count représente le nombre de nœuds.
L'exemple suivant insère l'élément 61 dans l'arborescence de recherche binaire suivante :
(1) L'élément 61 à insérer est supérieur à 42, comparer le nœud racine du sous-arbre droit de 42.
(2) 61 est plus grand que 59, donc 61 doit être déplacé vers la position correspondante du sous-arbre droit de 59, mais il est vide à ce moment, et directement inséré en tant que nœud enfant droit de 59.
L'opération d'insertion est également un processus récursif, divisé en trois cas, égal à, supérieur à et inférieur à.
Exemple de code Java
code du fichier src/runoob/binary/BinarySearchTreeInsert.java :
package runoob.binary;
/**
* L'arbre de recherche binaire insère de nouveaux éléments
*/
public class BinarySearchTreeInsert<Key extend Comparable<Key>, Value> { // Les nœuds de l'arbre sont des classes privées et le monde extérieur n'a pas besoin de comprendre l'arbre de recherche binaire L'implémentation spécifique du noeud private class Node { clé privée clé ; valeur privée valeur ; nœud privé gauche, droite ; nœud public (clé clé, valeur valeur) { this.key = clé ; this.value = valeur ; left = right = null; } } private Node root; // Nœud racine private int count; // Le nombre de nœuds dans le type d'arbre // Constructeur, par défaut pour construire un arbre de recherche binaire vide public BinarySearchTreeInsert() {
root = null;
count = 0;
}
// Renvoie le nombre de nœuds dans l'arbre de recherche binaire
public int size() { return count; } // Renvoie si l'arbre de recherche binaire est vide public boolean isEmpty() { return count = = 0 ; } // Insère une nouvelle paire de données (clé, valeur) dans l'arbre de recherche binaire public void insert(Key key, Value value) { root = insert(root, key, value); } // Core code -- - start // Insère un nœud (clé, valeur) dans l'arbre de recherche binaire enraciné au nœud et utilise un algorithme récursif // pour renvoyer la racine de l'arbre de recherche binaire après l'insertion du nouveau nœud private Node insert(Node node, Key clé, Valeur value) { if (node == null) { count++;
renvoie un nouveau nœud (clé, valeur);
}
if (key.compareTo(node.key) == 0)
node.value = value;
sinon si (key.compareTo(node.key) < 0)
node.left = insert(node.left, key, value);
else // clé > nœud-> clé
node.right = insert(node.right, key, value);
nœud de retour ;
}
//核心代码---结束
}