C Exemple de l'arborescence de recherche binaire
Jul 28, 2025 am 02:26 AMUn arbre de recherche binaire (BST) est un arbre binaire où le sous-arbre gauche ne contient que des n?uds avec des valeurs inférieures à la valeur du n?ud, le sous-arbre droit ne contient que des n?uds avec des valeurs supérieures à la valeur du n?ud, et les deux sous-arbres doivent également être BST; 1. L'implémentation C comprend une structure Treenode avec des pointeurs de valeur, gauche et droite; 2. La classe BST fournit des opérations d'insertion, de recherche et de traversée intégrée à l'aide de méthodes d'assistance récursive; 3. L'insertion maintient la propriété BST en comparant les valeurs et en évitant les doublons; 4. La recherche fonctionne dans le temps moyen o (log n) en naviguant vers la gauche ou la droite en fonction des comparaisons; 5. Valeurs de traversée en ordre dans l'ordre dans l'ordre trié en visitant à gauche, root, puis à droite; 6. Les considérations clés pour la production comprennent l'ajout d'un destructeur pour le nettoyage de la mémoire, l'équilibrage de l'arbre à l'aide d'une logique AVL ou rouge-noir et implémentant des méthodes itératives pour empêcher le débordement de la pile, ce qui fait de cet exemple une compréhension fondamentale des BST en c.
Voici un exemple C pratique d'un arbre de recherche binaire (BST) avec des opérations de base: insérer, recherche et traversée dans l'ordre.

? Qu'est-ce qu'un arbre de recherche binaire?
Un BST est un arbre binaire où:
- Le sous-arbre gauche d'un n?ud ne contient que des n?uds avec des valeurs inférieures à la valeur du n?ud.
- Le sous-arbre droit ne contient que des n?uds avec des valeurs supérieures à la valeur du n?ud.
- Les sous-arbres gauche et droit doivent également être des arbres de recherche binaires.
? C Exemple d'implémentation
#include <iostream> Utilisation de Namespace Std; // définir la structure d'un n?ud d'arbre struct treenode { INT VALEUR; Treenode * à gauche; Treenode * à droite; // constructeur Treenode (int Val): valeur (val), gauche (nullptr), droite (nullptr) {} }; // Classe d'arbre de recherche binaire classe bst { publique: Treenode * root; // constructeur Bst (): root (nullptr) {} // Fonction d'insertion publique void insert (int value) { root = insertrecursive (root, valeur); } // Fonction de recherche publique BOOL Search (int Value) { return searchReCursive (root, valeur); } // Traversion dans l'ordre (imprime les valeurs dans l'ordre trié) void inOrder () { InOrderRecursive (racine); cout << endl; } privé: // assistant: insérer le n?ud récursivement Treenode * insertrecursive (Treenode * n?ud, int value) { // Si l'arbre est vide, créez un nouveau n?ud if (node == nullptr) { return new Treenode (valeur); } // sinon, reproduire l'arbre if (valeur <Node-> valeur) { Node-> Left = insertRecursive (Node-> gauche, valeur); } else if (valeur> node-> value) { Node-> droite = insertrecursive (node-> droite, valeur); } // ignorer les doublons (valeur == n?ud-> valeur) Node de retour; } // assistant: recherche récursivement bool SearchReCursive (Node Treenode *, int Value) { if (node == nullptr) { retourne false; // pas trouvé } if (node-> value == valeur) { Retour Vrai; // Trouvé } if (valeur <Node-> valeur) { return searchReCursive (node-> gauche, valeur); } autre { return searchReCursive (node-> droite, valeur); } } // assistant: traversée dans l'ordre (gauche -> root -> à droite) void inOrderRecursive (Treenode * n?ud) { if (node! = nullptr) { inOrderRecursive (n?ud-> gauche); cout << node-> value << ""; inOrderRecursive (Node-> à droite); } } }; // Exemple d'utilisation int main () { Bst arbre; // insérer des valeurs arbre.insert (50); arbre.insert (30); Tree.insert (70); arbre.insert (20); arbre.insert (40); arbre.insert (60); Tree.insert (80); // Imprimer la traversée dans l'ordre (devrait être trié) cout << "Traversal dans l'ordre:"; Tree.inOrder (); // Sortie: 20 30 40 50 60 70 80 // Recherche de valeurs cout << "Recherche 40:" << (arbre.search (40)? "Found": "non trouvé") << endl; cout << "Search 25:" << (Tree.Search (25)? "Found": "non trouvé") << endl; retour 0; }
? Sortir:
Traversion dans l'ordre: 20 30 40 50 60 70 80 Rechercher 40: trouvé Recherche 25: Pas trouvé
? Points clés:
- L'insertion maintient la propriété BST en comparant les valeurs.
- La recherche est efficace (o (log n) en moyenne) en allant à gauche / à droite.
- La traversée dans l'ordre donne une sortie triée - l'un des principaux avantages des BST.
- Cette version ignore les valeurs en double . Vous pouvez le modifier pour autoriser les doublons (par exemple, en utilisant
ou en stockant le nombre).
?? Remarque:
Il s'agit d'une implémentation de base. Pour une utilisation en production, considérez:

- Nettoyage de la mémoire (ajoutez un destructeur pour supprimer les n?uds).
- équilibrage (utilisez des arbres AVL ou rouge-noir pour éviter les arbres asymétriques).
- Versions itératives pour éviter le débordement de pile dans les arbres profonds.
Fondamentalement, cet exemple vous donne une base solide pour comprendre comment les BST fonctionnent en c.
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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

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

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

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Sujets chauds

Le trading à haute fréquence est l'un des domaines les plus riches en fin de compte et à forte intensité de capital sur le marché des devises virtuelles. Il s'agit d'une concurrence sur la vitesse, les algorithmes et la technologie de pointe que les acteurs du marché ordinaires sont difficiles à impliquer. Comprendre son fonctionnement nous aidera à avoir une compréhension plus approfondie de la complexité et de la spécialisation du marché actuel des actifs numériques. Pour la plupart des gens, il est plus important de reconna?tre et de comprendre ce phénomène que de l'essayer vous-même.

RAII est une technologie importante utilisée dans la gestion des ressources dans C. son c?ur réside dans la gestion automatique des ressources tout au long du cycle de vie de l'objet. Son idée principale est: les ressources sont acquises au moment de la construction et libérées à la destruction, évitant ainsi les problèmes de fuite causés par la libération manuelle. Par exemple, lorsqu'il n'y a pas de RAII, l'opération de fichier nécessite un appel manuellement à l'appel. S'il y a une erreur au milieu ou un retour à l'avance, vous pouvez oublier de fermer le fichier; Et après avoir utilisé RAII, comme la classe FileHandle résume l'opération de fichier, le destructeur sera automatiquement appelé après avoir quitté la portée pour libérer la ressource. 1.RAII est utilisé dans la gestion des verrouillage (comme STD :: Lock_Guard), 2. Management de la mémoire (comme STD :: UNIQUE_PTR), 3. Base de données et gestion de la connexion réseau, etc.

Pour déterminer si STD :: Facultatif a une valeur, vous pouvez utiliser la méthode has_value () ou juger directement dans l'instruction if; Lors du retour d'un résultat qui peut être vide, il est recommandé d'utiliser STD :: Facultatif pour éviter les pointeurs et exceptions nuls; Il ne doit pas être abusé, et les valeurs de retour booléen ou les variables de bool indépendantes conviennent plus à certains scénarios; Les méthodes d'initialisation sont diverses, mais vous devez faire attention à l'utilisation de réinitialisation () pour effacer la valeur et faire attention au cycle de vie et au comportement de construction.

Il existe quatre méthodes courantes pour obtenir le premier élément de STD :: Vector: 1. Utilisez la méthode avant () pour vous assurer que le vecteur n'est pas vide, a une sémantique claire et est recommandé pour une utilisation quotidienne; 2. Utilisez l'indice [0], et il doit également être jugé vide, avec les performances comparables à la sémantique avant () mais légèrement plus faible; 3. Utiliser * begin (), qui convient à la programmation générique et aux algorithmes STL; 4. Utiliser à (0), sans jugement nul manuellement, mais à faible performance, et lancer des exceptions lors du passage de la frontière, ce qui convient au débogage ou à la manipulation des exceptions; La meilleure pratique consiste à appeler d'abord vide () pour vérifier s'il est vide, puis utiliser la méthode avant () pour obtenir le premier élément pour éviter un comportement non défini.

Le noyau du développement par PHP du résumé du texte d'IA est d'appeler les API de service AI externes (comme OpenAI, HuggingFace) en tant que coordinateur pour réaliser le prétraitement du texte, les demandes d'API, l'analyse de la réponse et l'affichage des résultats; 2. La limitation est que les performances informatiques sont faibles et que l'écosystème de l'IA est faible. La stratégie de réponse consiste à tirer parti des API, un découplage de service et un traitement asynchrone; 3. La sélection des modèles doit peser la qualité du résumé, le co?t, le retard, la concurrence, la confidentialité des données et des modèles abstraits tels que GPT ou BART / T5 sont recommandés; 4. L'optimisation des performances comprend le cache, les files d'attente asynchrones, le traitement par lots et la sélection des zones à proximité. Le traitement des erreurs doit couvrir la limite actuelle RETRING, le délai d'expiration du réseau, la sécurité des clés, la vérification et la journalisation des entrées pour assurer le fonctionnement stable et efficace du système.

L'opération de bits peut implémenter efficacement l'opération sous-jacente des entiers, 1. Vérifiez si le i-th bit est 1: utilisez N & (1

STD :: IS_SAME est utilisé pour déterminer si les deux types sont exactement les mêmes au moment de la compilation et renvoient une valeur bool. 1. Dans l'utilisation de base, std :: is_same :: la valeur est vraie lorsque t et u sont exactement les mêmes, sinon c'est faux. Différents modificateurs tels que const, référence, pointeur, etc. provoqueront une fausse; 2. Vous pouvez supprimer la modification de type avec STD :: Remove_Const, STD :: Remove_Reference et d'autres types, puis la comparer pour obtenir un jugement de type plus flexible; 3. Il est souvent utilisé dans la métaprogrammation des modèles dans des applications pratiques, telles que la compilation conditionnelle avec IFConstexpr, et effectuer une logique différente en fonction de différents types; 4

STD :: StringStream est utilisé en C pour la conversion de cha?ne, la division et les cha?nes d'épissage avec des types de données de base. 1. Vous pouvez convertir la cha?ne en type int, float, double et autres, utiliser l'opérateur >> pour extraire la valeur et vérifier si elle réussit via s.fail (); 2. Vous pouvez traiter les cha?nes composées et extraire plusieurs champs avec des espaces ou des séparateurs, qui conviennent à l'analyse des fichiers CSV et d'autres scénarios; 3. Support
