Maison  >  Article  >  Java  >  Arbre de recherche binaire à partir de zéro en Java

Arbre de recherche binaire à partir de zéro en Java

WBOY
WBOYoriginal
2024-07-17 22:19:03875parcourir

Binary Search Tree from Scratch in Java

Présentation
Un arbre de recherche binaire (BST) est un type d'arbre binaire dans lequel chaque nœud a au plus deux enfants, appelés enfant de gauche et enfant de droite. Pour chaque nœud, le sous-arbre de gauche contient uniquement les nœuds dont les valeurs sont inférieures à la valeur du nœud, et le sous-arbre de droite contient uniquement les nœuds dont les valeurs sont supérieures à la valeur du nœud. Les BST sont utilisés pour des opérations efficaces de recherche, d'insertion et de suppression.

Pourquoi utiliser un arbre de recherche binaire ?
Les BST offrent plusieurs avantages :

Recherche efficace : la complexité temporelle moyenne est de O (log n) pour la recherche, l'insertion et la suppression.
Ensemble d'éléments dynamique : prend en charge les opérations dynamiques, contrairement aux tableaux statiques.
Éléments ordonnés : le parcours dans l'ordre d'un BST produit des éléments dans un ordre trié.
Guide étape par étape pour créer un BST
Étape 1 : Définir la structure des nœuds
La première étape consiste à définir la structure d’un nœud dans l’arborescence. Chaque nœud aura trois attributs : une valeur, une référence à l'enfant de gauche et une référence à l'enfant de droite.

public class TreeNode {
    int value;
    TreeNode left;
    TreeNode right;

    TreeNode(int value) {
        this.value = value;
        this.left = null;
        this.right = null;
    }
}

Étape 2 : Créer la classe BST avec le constructeur
Ensuite, nous créons la classe BST qui contient une référence à la racine de l'arborescence et les méthodes d'insertion d'éléments.

public class BinarySearchTree {
    TreeNode root;

    public BinarySearchTree() {
        this.root = null;
    }
}

Étape 3 : implémenter la méthode d'insertion
Pour insérer un élément dans le BST, nous devons trouver la bonne position pour le nouveau nœud. La méthode d'insertion est généralement implémentée sous forme de fonction récursive.

public void insert(int value) {
    root = insertRec(root, value);
}

private TreeNode insertRec(TreeNode root, int value) {
    // Base case: if the tree is empty, return a new node
    if (root == null) {
        root = new TreeNode(value);
        return root;
    }

    // Otherwise, recur down the tree
    if (value < root.value) {
        root.left = insertRec(root.left, value);
    } else if (value > root.value) {
        root.right = insertRec(root.right, value);
    }

    // Return the (unchanged) node pointer
    return root;
}

Visualisation
Pour mieux comprendre le fonctionnement de l'insertion, prenons un exemple. Supposons que nous voulions insérer la séquence de nombres suivante dans le BST : 50, 30, 70, 20, 40, 60, 80.

50
  50
 /
30
  50
 /  \
30  70
50
 /  \
30  70
/

Insérer 40 :

  50
 /  \
30  70
/ \

Insérer 60

  50
 /  \
30  70
/ \  /

Insérer 80 :

  50
 /  \
30  70
/ \  / \

Code complet
Voici le code complet pour créer un BST et insérer des éléments :

public class BinarySearchTree {
    TreeNode root;

    public BinarySearchTree() {
        this.root = null;
    }

    public void insert(int value) {
        root = insertRec(root, value);
    }

    private TreeNode insertRec(TreeNode root, int value) {
        if (root == null) {
            root = new TreeNode(value);
            return root;
        }

        if (value < root.value) {
            root.left = insertRec(root.left, value);
        } else if (value > root.value) {
            root.right = insertRec(root.right, value);
        }

        return root;
    }

    // Additional methods for traversal, search, and delete can be added here

    public static void main(String[] args) {
        BinarySearchTree bst = new BinarySearchTree();
        int[] values = {50, 30, 70, 20, 40, 60, 80};
        for (int value : values) {
            bst.insert(value);
        }

        // Add code to print or traverse the tree
    }
}

class TreeNode {
    int value;
    TreeNode left;
    TreeNode right;

    TreeNode(int value) {
        this.value = value;
        this.left = null;
        this.right = null;
    }
}

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:
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