Table des matières
Exemple
Sortie
Conclusion
Maison développement back-end C++ Utilisez C++ pour supprimer tous les nœuds qui ne se trouvent sur aucun chemin et dont la somme du chemin est inférieure à k

Utilisez C++ pour supprimer tous les nœuds qui ne se trouvent sur aucun chemin et dont la somme du chemin est inférieure à k

Sep 04, 2023 am 10:17 AM
路径 chemin et Supprimer le nœud

Utilisez C++ pour supprimer tous les nœuds qui ne se trouvent sur aucun chemin et dont la somme du chemin est inférieure à k

Dans ce problème, nous avons un arbre binaire dont le chemin du nœud racine au nœud feuille est entièrement défini. La somme de tous les nœuds du nœud racine aux nœuds feuilles doit être supérieure ou égale à k. Nous devons donc supprimer tous les nœuds du chemin dont la somme est inférieure à k. La chose importante à retenir ici est qu'un nœud peut faire partie de plusieurs chemins, donc ces nœuds ne sont supprimés que si la somme de tous les chemins

Du nœud racine aux nœuds feuilles, nous pouvons calculer la somme. Lorsque l'appel récursif au nœud est terminé et que le contrôle revient, nous pouvons vérifier si la somme des chemins gauche et droit

Supposons que nous ayons 150 K et un arbre comme celui-ci -

      10
      / \
     20 30
    / \  / \
   5 35 40 45
   / \ / \
  50 55 60 65
  / \    / /
  70 80 90 100
Copier après la connexion

Si nous voyons la somme du chemin racine->gauche->gauche est 10 + 20 + 5, soit 25, soit moins de 150, nous avons besoin pour l'élaguer et supprimer 5. Après cela, évaluons 10->30->40. C'est moins de 150, alors supprimez 40. Maintenant, nous voyons un autre chemin 10->20->35->50, la somme de 115 est inférieure à 150, donc nous supprimons 50. Maintenant, nos chemins restants sont

10->20->35->55->70 ;
10->20->35->55->80 ;
10->30->45->60->90 ;
10->30->45->65->100 ;
Copier après la connexion

La somme de tous les chemins est supérieure à 150, nous n'avons donc plus besoin de tailler.

Exemple

#include <iostream>
using namespace std;
class Node {
   public:
   int value;
   Node *left, *right;
   Node(int value) {
      this->value = value;
      left = right = NULL;
   }
};
Node* removeNodesWithPathSumLessThanK(Node* root, int k, int& sum) {
   if(root == NULL) return NULL;
   int leftSum, rightSum;
   leftSum = rightSum = sum + root->value;
   root->left = removeNodesWithPathSumLessThanK(root->left, k, leftSum);
   root->right = removeNodesWithPathSumLessThanK(root->right, k, rightSum);
   sum = max(leftSum, rightSum);
   if(sum < k) {
      free(root);
      root = NULL;
   }
   return root;
}
void printInorderTree(Node* root) {
   if(root) {
      printInorderTree(root->left);
      cout << root->value << " ";
      printInorderTree(root->right);
   }
}
int main() {
   int k = 150;
   Node* root = new Node(10);
   root->left = new Node(20);
   root->right = new Node(30);
   root->left->left = new Node(5);
   root->left->right = new Node(35);
   root->right->left = new Node(40);
   root->right->right = new Node(45);
   root->left->right->left = new Node(50);
   root->left->right->right = new Node(55);
   root->right->right->left = new Node(60);
   root->right->right->right = new Node(65);
   root->left->right->right->left = new Node(70);
   root->left->right->right->right = new Node(80);
   root->right->right->left->left = new Node(90);
   root->right->right->right->left = new Node(100);
   int sum = 0;
   cout << "Inorder tree before: ";
   printInorderTree(root);
   root = removeNodesWithPathSumLessThanK(root, k, sum);
   cout << "\nInorder tree after: ";
   printInorderTree(root);
   return 0;
}
Copier après la connexion

Sortie

Inorder tree before: 5 20 50 35 70 55 80 10 40 30 90 60 45 100 65
Inorder tree after: 20 35 70 55 80 10 30 90 60 45 100 65
Copier après la connexion

Notre arbre entièrement élagué -

         10
         / \
      20 30
      \   \
      35 45
       \ / \
    55  60 65
    / \  /  /
  70 80 90 100
Copier après la connexion

Conclusion

Comme nous pouvons le voir, après l'observation initiale, nous pouvons appliquer DFS et transmettre la fonction récursive à son retour de chaque appel Calculer la somme de ce nœud pour supprimer le nœud. Dans l’ensemble, c’est une simple question d’observation et de méthodologie.

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)

Où se trouvent les thèmes dans Windows 11 ? Où se trouvent les thèmes dans Windows 11 ? Aug 01, 2023 am 09:29 AM

Windows 11 propose de nombreuses options de personnalisation, notamment une gamme de thèmes et de fonds d'écran. Si ces thèmes sont esthétiques à leur manière, certains utilisateurs se demandent encore où ils se situent en arrière-plan sur Windows 11. Ce guide vous montrera les différentes manières d'accéder à l'emplacement de votre thème Windows 11. Quel est le thème par défaut de Windows 11 ? L’arrière-plan du thème par défaut de Windows 11 est une fleur bleue royale abstraite en fleurs avec un fond bleu ciel. Ce fond est l'un des plus populaires, grâce à l'anticipation avant la sortie du système d'exploitation. Cependant, le système d'exploitation est également livré avec une gamme d'autres arrière-plans. Par conséquent, vous pouvez modifier l’arrière-plan du thème du bureau Windows 11 à tout moment. Les thèmes sont stockés dans Windo

Différentes utilisations des barres obliques et des barres obliques inverses dans les chemins de fichiers Différentes utilisations des barres obliques et des barres obliques inverses dans les chemins de fichiers Feb 26, 2024 pm 04:36 PM

Un chemin de fichier est une chaîne utilisée par le système d'exploitation pour identifier et localiser un fichier ou un dossier. Dans les chemins de fichiers, il existe deux symboles courants séparant les chemins, à savoir la barre oblique (/) et la barre oblique inverse (). Ces deux symboles ont des utilisations et des significations différentes selon les systèmes d'exploitation. La barre oblique (/) est un séparateur de chemin couramment utilisé dans les systèmes Unix et Linux. Sur ces systèmes, les chemins de fichiers partent du répertoire racine (/) et sont séparés par des barres obliques entre chaque répertoire. Par exemple, le chemin /home/user/Docume

Comment corriger l'erreur : classe principale introuvable ou chargée en Java Comment corriger l'erreur : classe principale introuvable ou chargée en Java Oct 26, 2023 pm 11:17 PM

Cette vidéo ne peut pas être lue en raison d'une erreur technique. (Code d'erreur : 102006) Ce guide fournit des solutions simples à ce problème courant et continue votre parcours de codage. Nous discuterons également des causes des erreurs Java et de la manière de les éviter à l'avenir. Qu'est-ce que « Erreur : classe principale introuvable ou chargée » en Java ? Java est un langage de programmation puissant qui permet aux développeurs de créer une large gamme d'applications. Cependant, sa polyvalence et son efficacité s'accompagnent d'une multitude d'erreurs courantes qui peuvent survenir lors du développement. L'une des interruptions est Erreur : classe principale user_jvm_args.txt introuvable ou chargée, ce qui se produit lorsque la machine virtuelle Java (JVM) ne trouve pas la classe principale pour exécuter un programme. Cette erreur agit comme un obstacle même dans

Quelle est la différence dans le chemin « Poste de travail » dans Win11 ? Un moyen rapide de le trouver ! Quelle est la différence dans le chemin « Poste de travail » dans Win11 ? Un moyen rapide de le trouver ! Mar 29, 2024 pm 12:33 PM

Quelle est la différence dans le chemin « Poste de travail » dans Win11 ? Un moyen rapide de le trouver ! Comme le système Windows est constamment mis à jour, le dernier système Windows 11 apporte également de nouvelles modifications et fonctions. L'un des problèmes courants est que les utilisateurs ne peuvent pas trouver le chemin d'accès à « Poste de travail » dans le système Win11. Il s'agissait généralement d'une opération simple dans les systèmes Windows précédents. Cet article présentera en quoi les chemins de « Poste de travail » sont différents dans le système Win11 et comment les trouver rapidement. Sous Windows1

Obtenez la partie répertoire d'un chemin de fichier à l'aide de la fonction path/filepath.Dir Obtenez la partie répertoire d'un chemin de fichier à l'aide de la fonction path/filepath.Dir Jul 27, 2023 am 09:06 AM

Utilisez la fonction path/filepath.Dir pour obtenir la partie répertoire du chemin de fichier. Dans notre processus de développement quotidien, le traitement du chemin de fichier est souvent impliqué. Parfois, nous devons obtenir la partie répertoire du chemin du fichier, c’est-à-dire le chemin d’accès au dossier où se trouve le fichier. Dans le langage Go, vous pouvez utiliser la fonction Dir fournie par le package path/filepath pour implémenter cette fonction. La signature de la fonction Dir est la suivante : funcDir(pathstring)string La fonction Dir reçoit un mot

Analyse du chemin de stockage du code source du noyau Linux Analyse du chemin de stockage du code source du noyau Linux Mar 14, 2024 am 11:45 AM

Le noyau Linux est un noyau de système d'exploitation open source dont le code source est stocké dans un référentiel de code dédié. Dans cet article, nous analyserons en détail le chemin de stockage du code source du noyau Linux et utiliserons des exemples de code spécifiques pour aider les lecteurs à mieux comprendre. 1. Chemin de stockage du code source du noyau Linux Le code source du noyau Linux est stocké dans un référentiel Git appelé Linux, hébergé sur [https://github.com/torvalds/linux](http

Comment utiliser le module os.path pour obtenir différentes parties du chemin du fichier dans Python 3.x Comment utiliser le module os.path pour obtenir différentes parties du chemin du fichier dans Python 3.x Jul 30, 2023 pm 02:57 PM

Comment utiliser le module os.path dans Python3.x pour obtenir diverses parties du chemin du fichier. Dans la programmation Python quotidienne, nous devons souvent opérer sur le chemin du fichier, comme obtenir le nom du fichier, le répertoire du fichier, l'extension, etc. du chemin. En Python, vous pouvez utiliser le module os.path pour effectuer ces opérations. Cet article explique comment utiliser le module os.path pour obtenir différentes parties du chemin du fichier afin d'améliorer la manipulation des fichiers. Le module os.path fournit une série de

Comment trouver le chemin de stockage des fichiers RPM dans le système Linux ? Comment trouver le chemin de stockage des fichiers RPM dans le système Linux ? Mar 14, 2024 pm 04:42 PM

Dans les systèmes Linux, RPM (RedHatPackageManager) est un outil de gestion de progiciels courant utilisé pour installer, mettre à niveau et supprimer des progiciels. Parfois, nous devons trouver le chemin de stockage d'un fichier RPM installé pour une recherche ou d'autres opérations. Ce qui suit explique comment trouver le chemin de stockage du fichier RPM dans le système Linux et fournit des exemples de code spécifiques. Tout d’abord, nous pouvons utiliser la commande rpm pour trouver le package RPM installé et son chemin de stockage. Ouvrir

See all articles