Maison Java javaDidacticiel Explication détaillée de la structure arborescente binaire en Java

Explication détaillée de la structure arborescente binaire en Java

Jun 16, 2023 am 08:58 AM
数据结构 java语言 二叉树

L'arbre binaire est une structure de données courante en informatique et une structure de données couramment utilisée en programmation Java. Cet article présentera en détail la structure arborescente binaire en Java.

1. Qu'est-ce qu'un arbre binaire ?

En informatique, un arbre binaire est une structure arborescente dont chaque nœud a au plus deux nœuds enfants. Parmi eux, le nœud enfant gauche est plus petit que le nœud parent et le nœud enfant droit est plus grand que le nœud parent. Dans la programmation Java, les arbres binaires sont couramment utilisés pour représenter le tri, la recherche et l'amélioration de l'efficacité des requêtes de données.

2. Implémentation d'arbre binaire en Java

En Java, l'implémentation d'arbres binaires utilise généralement la classe de nœuds (Node Class) et la classe d'arbre binaire (Binary Tree Class). La classe de nœuds représente chaque nœud de l'arborescence binaire et peut avoir des octets et des attributs pour stocker les données. La classe d'arbre binaire représente l'intégralité de la structure de données de l'arbre binaire et possède des fonctions telles que l'insertion de nœuds, la suppression de nœuds et le parcours. Ce qui suit est une implémentation simple d'un arbre binaire Java :

public class Node {
    int key;
    String value;
    Node leftChild, rightChild;

    public Node(int key, String value) {
        this.key = key;
        this.value = value;
    }
}

public class BinaryTree {
    Node root;

    public void insert(int key, String value) {
        Node newNode = new Node(key, value);
        if (root == null) {
            root = newNode;
        } else {
            Node current = root;
            while (true) {
                if (key < current.key) {
                    if (current.leftChild == null) {
                        current.leftChild = newNode;
                        return;
                    }
                    current = current.leftChild;
                } else {
                    if (current.rightChild == null) {
                        current.rightChild = newNode;
                        return;
                    }
                    current = current.rightChild;
                }
            }
        }
    }

    public Node find(int key) {
        Node current = root;
        while (current.key != key) {
            if (key < current.key) {
                current = current.leftChild;
            } else {
                current = current.rightChild;
            }
            if (current == null) {
                return null;
            }
        }
        return current;
    }

    public void inOrderTraversal(Node node) {
        if (node != null) {
            inOrderTraversal(node.leftChild);
            System.out.println(node.key + ": " + node.value);
            inOrderTraversal(node.rightChild);
        }
    }

    public void preOrderTraversal(Node node) {
        if (node != null) {
            System.out.println(node.key + ": " + node.value);
            preOrderTraversal(node.leftChild);
            preOrderTraversal(node.rightChild);
        }
    }

    public void postOrderTraversal(Node node) {
        if (node != null) {
            postOrderTraversal(node.leftChild);
            postOrderTraversal(node.rightChild);
            System.out.println(node.key + ": " + node.value);
        }
    }

    public static void main(String[] args) {
        BinaryTree tree = new BinaryTree();

        tree.insert(50, "John");
        tree.insert(25, "Alice");
        tree.insert(75, "Bob");
        tree.insert(15, "Chris");
        tree.insert(33, "Diana");
        tree.insert(60, "Emily");
        tree.insert(90, "Fred");

        Node node = tree.find(33);
        System.out.println("Find key: " + node.key + ", value: " + node.value);

        System.out.println("In-order traversal:");
        tree.inOrderTraversal(tree.root);

        System.out.println("Pre-order traversal:");
        tree.preOrderTraversal(tree.root);

        System.out.println("Post-order traversal:");
        tree.postOrderTraversal(tree.root);
    }
}
Copier après la connexion

Le code de l'arbre binaire ci-dessus comprend trois fonctions principales : l'insertion de nœuds, la recherche de nœuds et trois méthodes de traversée différentes. Le nœud d'insertion utilise une boucle while pour insérer les données dans l'ordre de l'arborescence binaire ; le nœud de recherche utilise une boucle while pour parcourir l'arborescence afin de rechercher les données cibles ; les trois méthodes de parcours sont implémentées de manière récursive.

3. Méthodes de traversée d'arbre binaire

Dans le code Java ci-dessus, le programme implémente trois méthodes différentes de traversée d'arbre binaire : traversée dans l'ordre, traversée en pré-ordre et post- ordre traversant. Cette section présentera ces trois méthodes de parcours une par une.

  1. Parcours dans l'ordre

Le parcours dans l'ordre parcourt les nœuds de l'arborescence dans l'ordre du plus petit au plus grand. Dans le code Java, l'implémentation du parcours dans l'ordre utilise la récursion : pour chaque nœud, appelez d'abord son propre nœud gauche, puis imprimez les données du nœud, et enfin appelez son propre nœud droit. De cette façon, tous les nœuds de l’arborescence peuvent être parcourus du plus petit au plus grand.

  1. Preorder traversal

Preorder traversal parcourt les nœuds de l'arborescence dans l'ordre du nœud parent, du nœud gauche et du nœud droit. Dans le code Java, l'implémentation du parcours de précommande utilise également la récursion : pour chaque nœud, imprimez d'abord les données du nœud, puis appelez son propre nœud gauche, et enfin appelez son propre nœud droit. De cette façon, tous les nœuds de l’arborescence peuvent être parcourus dans l’ordre du nœud parent, du nœud gauche et du nœud droit.

  1. Parcours post-commande

Le parcours post-commande parcourt les nœuds de l'arborescence dans l'ordre du nœud gauche, du nœud droit et du parent nœud. Dans le code Java, l'implémentation du parcours post-ordre utilise également la récursion : pour chaque nœud, appelez d'abord son propre nœud gauche, puis appelez son propre nœud droit, et enfin imprimez les données du nœud. De cette façon, tous les nœuds de l’arborescence peuvent être parcourus dans l’ordre du nœud gauche, du nœud droit et du nœud parent.

4. Algorithmes d'arbre binaire couramment utilisés

L'arbre binaire est une structure de données flexible et très utile En programmation Java, l'algorithme d'arbre binaire est souvent utilisé. Les algorithmes d'arbre binaire suivants sont couramment utilisés :

  1. Search

La recherche est l'une des fonctions les plus élémentaires des arbres binaires et est également fréquemment utilisée. fonction utilisée. Dans le code Java, la mise en œuvre de la recherche est très simple : pour chaque nœud, en comparant la taille de la valeur du nœud et la valeur cible, recherchez vers le bas couche par couche jusqu'à ce que la valeur cible soit trouvée ou que l'arbre entier soit parcouru.

  1. Insertion

L'insertion est la fonction d'ajouter de nouveaux nœuds à l'arbre binaire, et les nouveaux nœuds insérés suivront également l'ordre de tri de l'arbre binaire. En code Java, la mise en œuvre de l'insertion est également relativement simple : comparez la taille du nœud à insérer et du nœud actuel, et insérez un nouveau nœud lorsqu'une position appropriée est trouvée.

  1. Delete

La suppression est la fonction de suppression de nœuds de l'arborescence binaire Dans le code Java, la mise en œuvre de la suppression est plus compliquée et nécessite. à considérer. Plus. Si le nœud supprimé n'a pas de nœuds enfants, supprimez-le directement ; s'il n'y a qu'un seul nœud enfant, déplacez simplement le nœud enfant à la position du nœud supprimé ; si le nœud supprimé a deux nœuds enfants, vous devez trouver le minimum ; valeur du nœud enfant droit et remplacez-le par l'emplacement du nœud supprimé.

5. Résumé

Cet article présente en détail la structure des données de l'arbre binaire en Java, y compris la définition de l'arbre binaire, l'implémentation des nœuds et des classes d'arbre binaire, trois différents méthodes de traversée et algorithme d'arbre binaire couramment utilisé. L'arbre binaire est une structure de données largement utilisée et Java fournit de nombreuses fonctions et bibliothèques de classes pour faciliter la mise en œuvre des arbres binaires. Lors de la programmation en Java, la maîtrise de l'utilisation et de la mise en œuvre d'arbres binaires peut améliorer l'efficacité du programme et la précision des requêtes de données.

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)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois 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)

Comparez des structures de données complexes à l'aide de la comparaison de fonctions Java Comparez des structures de données complexes à l'aide de la comparaison de fonctions Java Apr 19, 2024 pm 10:24 PM

Lors de l'utilisation de structures de données complexes en Java, Comparator est utilisé pour fournir un mécanisme de comparaison flexible. Les étapes spécifiques comprennent : la définition d’une classe de comparaison et la réécriture de la méthode de comparaison pour définir la logique de comparaison. Créez une instance de comparaison. Utilisez la méthode Collections.sort, en transmettant les instances de collection et de comparateur.

Structures de données et algorithmes Java : explication détaillée Structures de données et algorithmes Java : explication détaillée May 08, 2024 pm 10:12 PM

Les structures de données et les algorithmes sont à la base du développement Java. Cet article explore en profondeur les structures de données clés (telles que les tableaux, les listes chaînées, les arbres, etc.) et les algorithmes (tels que le tri, la recherche, les algorithmes graphiques, etc.) en Java. Ces structures sont illustrées par des exemples pratiques, notamment l'utilisation de tableaux pour stocker les scores, de listes chaînées pour gérer les listes de courses, de piles pour implémenter la récursion, de files d'attente pour synchroniser les threads, ainsi que d'arbres et de tables de hachage pour une recherche et une authentification rapides. Comprendre ces concepts vous permet d'écrire du code Java efficace et maintenable.

Compréhension approfondie des types de référence en langage Go Compréhension approfondie des types de référence en langage Go Feb 21, 2024 pm 11:36 PM

Les types de référence sont un type de données spécial dans le langage Go. Leurs valeurs ne stockent pas directement les données elles-mêmes, mais l'adresse des données stockées. Dans le langage Go, les types de référence incluent des tranches, des cartes, des canaux et des pointeurs. Une compréhension approfondie des types de référence est cruciale pour comprendre les méthodes de gestion de la mémoire et de transfert de données du langage Go. Cet article combinera des exemples de code spécifiques pour présenter les caractéristiques et l'utilisation des types de référence dans le langage Go. 1. Tranches Les tranches sont l'un des types de référence les plus couramment utilisés dans le langage Go.

Structure de données PHP : l'équilibre des arborescences AVL, maintenant une structure de données efficace et ordonnée Structure de données PHP : l'équilibre des arborescences AVL, maintenant une structure de données efficace et ordonnée Jun 03, 2024 am 09:58 AM

L'arbre AVL est un arbre de recherche binaire équilibré qui garantit des opérations de données rapides et efficaces. Pour atteindre l'équilibre, il effectue des opérations de virage à gauche et à droite, en ajustant les sous-arbres qui violent l'équilibre. Les arbres AVL utilisent l'équilibrage de hauteur pour garantir que la hauteur de l'arbre est toujours petite par rapport au nombre de nœuds, réalisant ainsi des opérations de recherche de complexité temporelle logarithmique (O (logn)) et maintenant l'efficacité de la structure de données même sur de grands ensembles de données.

Analyse complète du cadre de collecte Java : disséquer la structure des données et révéler le secret d'un stockage efficace Analyse complète du cadre de collecte Java : disséquer la structure des données et révéler le secret d'un stockage efficace Feb 23, 2024 am 10:49 AM

Présentation de Java Collection Framework L'infrastructure de collection Java est une partie importante du langage de programmation Java. Elle fournit une série de bibliothèques de classes conteneur qui peuvent stocker et gérer des données. Ces bibliothèques de classes de conteneurs ont différentes structures de données pour répondre aux besoins de stockage et de traitement des données dans différents scénarios. L'avantage du framework de collection est qu'il fournit une interface unifiée, permettant aux développeurs d'exploiter différentes bibliothèques de classes de conteneurs de la même manière, réduisant ainsi la difficulté de développement. Structures de données de l'infrastructure de collection Java L'infrastructure de collection Java contient diverses structures de données, chacune ayant ses propres caractéristiques et scénarios applicables. Voici plusieurs structures de données courantes du cadre de collection Java : 1. Liste : Liste est une collection ordonnée qui permet de répéter des éléments. Li

Apprenez en profondeur les secrets des structures de données du langage Go Apprenez en profondeur les secrets des structures de données du langage Go Mar 29, 2024 pm 12:42 PM

Une étude approfondie des mystères de la structure des données du langage Go nécessite des exemples de code spécifiques. En tant que langage de programmation concis et efficace, le langage Go montre également son charme unique dans le traitement des structures de données. La structure des données est un concept de base en informatique, qui vise à organiser et gérer les données afin qu'elles puissent être consultées et manipulées plus efficacement. En apprenant en profondeur les mystères de la structure des données du langage Go, nous pouvons mieux comprendre comment les données sont stockées et exploitées, améliorant ainsi l'efficacité de la programmation et la qualité du code. 1. Array Array est l'une des structures de données les plus simples

Structures de données PHP SPL : injectez de la vitesse et de la flexibilité dans vos projets Structures de données PHP SPL : injectez de la vitesse et de la flexibilité dans vos projets Feb 19, 2024 pm 11:00 PM

Présentation de la bibliothèque de structures de données PHPSPL La bibliothèque de structures de données PHPSPL (Standard PHP Library) contient un ensemble de classes et d'interfaces pour stocker et manipuler diverses structures de données. Ces structures de données comprennent des tableaux, des listes chaînées, des piles, des files d'attente et des ensembles, chacun fournissant un ensemble spécifique de méthodes et de propriétés pour manipuler les données. Tableaux En PHP, un tableau est une collection ordonnée qui stocke une séquence d'éléments. La classe de tableau SPL fournit des fonctions améliorées pour les tableaux PHP natifs, notamment le tri, le filtrage et le mappage. Voici un exemple d'utilisation de la classe array SPL : useSplArrayObject;$array=newArrayObject(["foo","bar","baz"]);$array

Carte Java révélée : conseils et stratégies pour un accès rapide aux données Carte Java révélée : conseils et stratégies pour un accès rapide aux données Feb 19, 2024 pm 06:21 PM

JavaMap est une structure de données basée sur des paires clé-valeur qui permet aux développeurs de stocker et de récupérer rapidement des données. Les clés d'une Map peuvent être n'importe quel objet et les valeurs peuvent être n'importe quel type de données. Chaque clé de la Map ne peut être associée qu'à au plus une valeur. Si plusieurs valeurs sont définies pour la même clé, seule la dernière valeur définie sera conservée. Il existe deux implémentations principales de Map : HashMap : utilise une table de hachage pour stocker les paires clé-valeur. Les performances de HashMap dépendent de la manière dont la table de hachage est implémentée et, dans la plupart des cas, HashMap fonctionne mieux que TreeMap. TreeMap : utilise des arbres rouge-noir pour stocker les paires clé-valeur. Les performances de TreeMap sont similaires à celles de HashMap, mais dans certains cas, les performances de TreeMap peuvent être

See all articles