Table des matières
Façon de trouver une solution
Exemple
Sortie
Explication du code ci-dessus
Conclusion
Maison développement back-end C++ Code C++ pour inverser les chemins dans un arbre de recherche binaire à l'aide de files d'attente

Code C++ pour inverser les chemins dans un arbre de recherche binaire à l'aide de files d'attente

Sep 14, 2023 pm 07:21 PM
反转 队列 二叉搜索树

Par exemple, étant donné un arbre de recherche binaire, nous devons inverser son chemin à partir d'une clé spécifique.

Code C++ pour inverser les chemins dans un arbre de recherche binaire à laide de files dattente

Code C++ pour inverser les chemins dans un arbre de recherche binaire à laide de files dattente

Façon de trouver une solution

Dans cette méthode, nous allons créer une file d'attente et pousser tous les nœuds jusqu'à ce que nous obtenions le nœud racine.

p>

Exemple

 
#include <bits/stdc++.h>
using namespace std;
struct node {
   int key;
   struct node *left, *right;
};
struct node* newNode(int item){
   struct node* temp = new node;
   temp->key = item;
   temp->left = temp->right = NULL;
   return temp;
}
void inorder(struct node* root){
   if (root != NULL) {
       inorder(root->left);
       cout << root->key << " ";
       inorder(root->right);
   }
}
void Reversing(struct node** node,
           int& key, queue<int>& q1){
   /* If the tree is empty then
   return*/
   if (node == NULL)
       return;
   if ((*node)->key == key){ // if we find the key
       q1.push((*node)->key); // we push it into our queue
       (*node)->key = q1.front(); // we change the first queue element with current
       q1.pop(); // we pop the first element
   }
   else if (key < (*node)->key){ // if key is less than current node&#39;s value
       q1.push((*node)->key); // we push the element in our queue
       Reversing(&(*node)->left, key, q1); //we go to the left subtree using a recursive call
       (*node)->key = q1.front(); //we reverse the elements
       q1.pop(); // we pop the first element
   }
   else if (key > (*node)->key){ // if key greater than node key then
       q1.push((*node)->key);// we push node key into queue
       Reversing(&(*node)->right, key, q1);// we go to right subtree using a recursive call
       (*node)->key = q1.front();// replace queue front to node key
       q1.pop(); // we pop the first element
   }
   return;
}
struct node* insert_node(struct node* node, // function to insert node nodes in our BST
                           int key){
   if (node == NULL)
       return newNode(key); // if tree is empty we return a new node
   if (key < node->key) // else we push that in our tree
       node->left = insert_node(node->left, key);
   else if (key > node->key)
       node->right = insert_node(node->right, key);
   return node; // returning the node
}
int main(){
   struct node* root = NULL;
   queue<int> q1;
   int k = 80;
/****************Creating the BST*************************/
   root = insert_node(root, 50);
   insert_node(root, 30);
   insert_node(root, 20);
   insert_node(root, 40);
   insert_node(root, 70);
   insert_node(root, 60);
   insert_node(root, 80);
   cout << "Before Reversing :" << "\n";
   inorder(root);
   cout << "\n";
   Reversing(&root, k, q1);
   cout << "After Reversing :" << "\n";
   // print inorder of reverse path tree
   inorder(root);
   return 0;
}
Copier après la connexion

Sortie

Before Reversing :
20 30 40 50 60 70 80
After Reversing :
20 30 40 80 60 70 50
Copier après la connexion

Explication du code ci-dessus

Dans cette méthode, nous recherchons simplement la clé donnée. Lorsque nous parcourons l'arbre, nous mettons tous les nœuds dans une file d'attente et maintenant, lorsque nous trouvons le nœud avec la valeur clé, nous échangeons les valeurs de tous les nœuds de chemin qui nous ont précédés et, ce faisant, notre chemin

Conclusion

Nous avons résolu le problème de l'inversion des chemins dans BST en utilisant des files d'attente et la récursivité. Nous avons également appris le programme C++ pour ce problème et la méthode complète (générique) pour le résoudre. Nous pouvons écrire le même programme dans d'autres langages tels que C, Java, Python et d'autres langages. Nous espérons que vous avez trouvé ce tutoriel utile.

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

Application de la technologie de file d'attente au délai de message et aux nouvelles tentatives de message en PHP et MySQL Application de la technologie de file d'attente au délai de message et aux nouvelles tentatives de message en PHP et MySQL Oct 15, 2023 pm 02:26 PM

Application de la technologie de file d'attente au délai de message et aux nouvelles tentatives de message dans PHP et MySQL Résumé : Avec le développement continu des applications Web, la demande de traitement hautement simultané et de fiabilité du système devient de plus en plus élevée. En tant que solution, la technologie de file d'attente est largement utilisée dans PHP et MySQL pour implémenter des fonctions de délai de message et de nouvelle tentative de message. Cet article présentera l'application de la technologie de file d'attente dans PHP et MySQL, y compris les principes de base des files d'attente, les méthodes d'utilisation des files d'attente pour implémenter le délai de message et les méthodes d'utilisation des files d'attente pour implémenter les nouvelles tentatives de message, et donnera

Stratégies d'analyse et d'optimisation des performances des files d'attente Java Queue Stratégies d'analyse et d'optimisation des performances des files d'attente Java Queue Jan 09, 2024 pm 05:02 PM

Analyse des performances et stratégie d'optimisation de JavaQueue Résumé de la file d'attente : La file d'attente (file d'attente) est l'une des structures de données couramment utilisées en Java et est largement utilisée dans divers scénarios. Cet article abordera les problèmes de performances des files d'attente JavaQueue sous deux aspects : l'analyse des performances et les stratégies d'optimisation, et donnera des exemples de code spécifiques. Introduction La file d'attente est une structure de données premier entré, premier sorti (FIFO) qui peut être utilisée pour implémenter le mode producteur-consommateur, la file d'attente des tâches du pool de threads et d'autres scénarios. Java fournit une variété d'implémentations de files d'attente, telles que Arr

Comment inverser et inverser l'ordre d'un tableau PHP Comment inverser et inverser l'ordre d'un tableau PHP Sep 05, 2023 am 08:28 AM

Comment inverser et inverser un tableau PHP En PHP, un tableau est une structure de données couramment utilisée capable de stocker et de manipuler de grandes quantités de données. Parfois, nous devons inverser ou inverser le tableau pour répondre à des besoins spécifiques. Cet article explique comment utiliser PHP pour inverser et inverser un tableau et donne des exemples de code correspondants. 1. Inverser un tableau Inverser un tableau signifie réorganiser les éléments du tableau dans l'ordre inverse selon leur ordre d'origine. PHP fournit une variété de méthodes pour inverser les tableaux. Voici deux méthodes couramment utilisées :

En Java, quelle est la différence entre la méthode add() et la méthode offer() dans la file d'attente ? En Java, quelle est la différence entre la méthode add() et la méthode offer() dans la file d'attente ? Aug 27, 2023 pm 02:25 PM

La file d'attente en Java est une structure de données linéaire avec plusieurs fonctions. La file d'attente a deux points de terminaison et suit le principe premier entré, premier sorti (FIFO) pour insérer et supprimer ses éléments. Dans ce didacticiel, nous découvrirons deux fonctions importantes des files d'attente en Java, à savoir add() et Offer(). Qu'est-ce qu'une file d'attente ? Queue en Java est une interface qui étend les packages util et collection. Les éléments sont insérés dans le backend et supprimés du frontend. Les files d'attente en Java peuvent être implémentées à l'aide de classes telles que les listes chaînées, DeQueue et les files d'attente prioritaires. Une file d'attente prioritaire est une forme étendue d'une file d'attente normale, dans laquelle chaque élément a une priorité. La méthode add() de la file d'attente est utilisée pour insérer des éléments dans la file d'attente. Il définira l'élément (comme

Plan d'implémentation de la surveillance des tâches de file d'attente et de la planification des tâches en PHP et MySQL Plan d'implémentation de la surveillance des tâches de file d'attente et de la planification des tâches en PHP et MySQL Oct 15, 2023 am 09:15 AM

Implémentation de la surveillance des tâches de file d'attente et de la planification des tâches dans PHP et MySQL Introduction Dans le développement d'applications Web modernes, la file d'attente de tâches est une technologie très importante. Grâce aux files d'attente, nous pouvons mettre en file d'attente certaines tâches qui doivent être exécutées en arrière-plan et contrôler le temps d'exécution et l'ordre des tâches grâce à la planification des tâches. Cet article présentera comment implémenter la surveillance et la planification des tâches dans PHP et MySQL, et fournira des exemples de code spécifiques. 1. Principe de fonctionnement de la file d'attente La file d'attente est une structure de données premier entré, premier sorti (FIFO) qui peut être utilisée pour

Quel est le principe et la mise en œuvre du système de file d'attente de courrier PHP ? Quel est le principe et la mise en œuvre du système de file d'attente de courrier PHP ? Sep 13, 2023 am 11:39 AM

Quel est le principe et la mise en œuvre du système de file d'attente de courrier PHP ? Avec le développement d’Internet, le courrier électronique est devenu l’un des moyens de communication indispensables dans la vie quotidienne et professionnelle des gens. Cependant, à mesure que l'entreprise se développe et que le nombre d'utilisateurs augmente, l'envoi direct d'e-mails peut entraîner une dégradation des performances du serveur, un échec de livraison des e-mails et d'autres problèmes. Pour résoudre ce problème, vous pouvez utiliser un système de file d'attente de messagerie pour envoyer et gérer des e-mails via une file d'attente série. Le principe de mise en œuvre du système de file d'attente de courrier est le suivant : Lorsque le courrier est mis en file d'attente, lorsqu'il est nécessaire d'envoyer le courrier, il ne l'est plus directement

Code C++ pour inverser les chemins dans un arbre de recherche binaire à l'aide de files d'attente Code C++ pour inverser les chemins dans un arbre de recherche binaire à l'aide de files d'attente Sep 14, 2023 pm 07:21 PM

Par exemple, étant donné un arbre de recherche binaire, nous devons inverser son chemin à partir d'une clé spécifique. Façons de trouver la solution Dans cette approche, nous allons créer une file d'attente et pousser tous les nœuds jusqu'à ce que nous obtenions le nœud racine. p>Exemple #include<bits/stdc++.h>usingnamespacestd;structnode{ intkey; structnode*left,*right;};structnode*newNode(intitem){&nb

Traduction : Pour les requêtes M, inversez la plage de la chaîne donnée Traduction : Pour les requêtes M, inversez la plage de la chaîne donnée Aug 25, 2023 pm 08:09 PM

Dans ce problème, nous effectuerons des requêtes inverses sur la chaîne donnée en fonction des valeurs du tableau. Ensuite, une approche naïve pour résoudre le problème consiste à inverser chaque segment de chaîne en fonction de la valeur du tableau donnée. L'approche optimisée utilise la logique qui consiste à inverser deux fois la même sous-chaîne.

See all articles