


Verwenden Sie C++, um alle Knoten zu löschen, die sich auf keinem Pfad befinden und deren Pfadsumme kleiner als k ist
In diesem Problem haben wir einen Binärbaum, dessen Pfad vom Wurzelknoten zum Blattknoten vollständig definiert ist. Die Summe aller Knoten vom Wurzelknoten bis zu den Blattknoten muss größer oder gleich k sein. Wir müssen also alle Knoten im Pfad löschen, deren Summe kleiner als k ist. Hierbei ist zu beachten, dass ein Knoten Teil vieler Pfade sein kann. Daher werden solche Knoten nur entfernt, wenn die Summe aller Pfade
Vom Wurzelknoten bis zu den Blattknoten können wir die Summe berechnen. Wenn der rekursive Aufruf des Knotens abgeschlossen ist und die Kontrolle zurückkehrt, können wir prüfen, ob die Summe der linken und rechten Pfade
Angenommen, wir haben 150 K und einen Baum wie diesen –
10 / \ 20 30 / \ / \ 5 35 40 45 / \ / \ 50 55 60 65 / \ / / 70 80 90 100
Wenn wir sehen, dass die Summe des Pfads root->left->left 10 + 20 + 5 ist, also 25, was weniger als 150 ist, brauchen wir um es zu beschneiden und zu löschen 5. Danach werten wir 10->30->40 aus. Es ist weniger als 150, also streichen Sie 40. Jetzt sehen wir einen anderen Pfad 10->20->35->50, die Summe von 115 ist kleiner als 150, also löschen wir 50. Jetzt sind unsere verbleibenden Pfade
10->20->35->55->70 ; 10->20->35->55->80 ; 10->30->45->60->90 ; 10->30->45->65->100 ;
Die Summe aller Pfade ist größer als 150, sodass wir nicht mehr beschneiden müssen.
Beispiel
#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; }
Ausgabe
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
Unser vollständig beschnittener Baum –
10 / \ 20 30 \ \ 35 45 \ / \ 55 60 65 / \ / / 70 80 90 100
Schlussfolgerung
Wie wir sehen können, können wir nach der ersten Beobachtung DFS anwenden und die rekursive Funktion übergeben, wenn sie von jedem Aufruf zurückkommt. Berechnen Sie die Summe von diesen Knoten, um den Knoten zu entfernen. Im Großen und Ganzen ist dies eine einfache Frage der Beobachtung und Methodik.
Das obige ist der detaillierte Inhalt vonVerwenden Sie C++, um alle Knoten zu löschen, die sich auf keinem Pfad befinden und deren Pfadsumme kleiner als k ist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Windows 11 bietet so viele Anpassungsoptionen, darunter eine Reihe von Themen und Hintergrundbildern. Obwohl diese Themen auf ihre Art ästhetisch sind, fragen sich einige Benutzer immer noch, wo sie unter Windows 11 im Hintergrund stehen. Diese Anleitung zeigt Ihnen die verschiedenen Möglichkeiten, auf den Speicherort Ihres Windows 11-Designs zuzugreifen. Was ist das Standarddesign von Windows 11? Der Standard-Designhintergrund von Windows 11 ist eine blühende abstrakte königsblaue Blume mit einem himmelblauen Hintergrund. Dieser Hintergrund ist aufgrund der Vorfreude auf die Veröffentlichung des Betriebssystems einer der beliebtesten. Das Betriebssystem bringt jedoch auch eine Reihe anderer Hintergründe mit. Daher können Sie den Hintergrund des Windows 11-Desktopdesigns jederzeit ändern. Themen werden in Windo gespeichert

Ein Dateipfad ist eine Zeichenfolge, die vom Betriebssystem verwendet wird, um eine Datei oder einen Ordner zu identifizieren und zu finden. In Dateipfaden gibt es zwei gängige Symbole zur Trennung von Pfaden, nämlich den Schrägstrich (/) und den Backslash (). Diese beiden Symbole haben in verschiedenen Betriebssystemen unterschiedliche Verwendungen und Bedeutungen. Der Schrägstrich (/) ist ein häufig verwendetes Pfadtrennzeichen in Unix- und Linux-Systemen. Auf diesen Systemen beginnen Dateipfade im Stammverzeichnis (/) und werden durch Schrägstriche zwischen den einzelnen Verzeichnissen getrennt. Zum Beispiel der Pfad /home/user/Docume

Dieses Video kann aufgrund eines technischen Fehlers nicht abgespielt werden. (Fehlercode: 102006) Dieser Leitfaden bietet einfache Lösungen für dieses häufige Problem und ermöglicht Ihnen die Fortsetzung Ihrer Codierungsreise. Wir werden auch die Ursachen von Java-Fehlern besprechen und wie man sie in Zukunft verhindern kann. Was ist „Fehler: Hauptklasse nicht gefunden oder geladen“ in Java? Java ist eine leistungsstarke Programmiersprache, die es Entwicklern ermöglicht, eine breite Palette von Anwendungen zu erstellen. Seine Vielseitigkeit und Effizienz bringen jedoch eine Reihe häufiger Fehler mit sich, die während der Entwicklung passieren können. Einer der Interrupts ist „Fehler: Hauptklasse user_jvm_args.txt nicht gefunden oder geladen“, was auftritt, wenn die Java Virtual Machine (JVM) die Hauptklasse zum Ausführen eines Programms nicht finden kann. Dieser Fehler wirkt selbst in einer Hürde

Was ist der Unterschied im Pfad „Arbeitsplatz“ in Win11? Schneller Weg, es zu finden! Da das Windows-System ständig aktualisiert wird, bringt auch das neueste Windows 11-System einige neue Änderungen und Funktionen mit sich. Eines der häufigsten Probleme besteht darin, dass Benutzer den Pfad zu „Arbeitsplatz“ im Win11-System nicht finden können. Dies war in früheren Windows-Systemen normalerweise ein einfacher Vorgang. In diesem Artikel erfahren Sie, wie sich der Pfad „Arbeitsplatz“ im Win11-System unterscheidet und wie Sie ihn schnell finden. Unter Windows1

Verwenden Sie die Funktion path/filepath.Dir, um den Verzeichnisteil des Dateipfads abzurufen. In unserem täglichen Entwicklungsprozess ist häufig die Verarbeitung von Dateipfaden erforderlich. Manchmal müssen wir den Verzeichnisteil des Dateipfads ermitteln, also den Pfad zu dem Ordner, in dem sich die Datei befindet. In der Go-Sprache können Sie die Dir-Funktion verwenden, die vom Paket path/filepath bereitgestellt wird, um diese Funktion zu implementieren. Die Signatur der Dir-Funktion lautet wie folgt: funcDir(pathstring)string Die Dir-Funktion empfängt ein Wort

Der Linux-Kernel ist ein Open-Source-Betriebssystemkernel, dessen Quellcode in einem speziellen Code-Repository gespeichert ist. In diesem Artikel analysieren wir den Speicherpfad des Linux-Kernel-Quellcodes im Detail und verwenden spezifische Codebeispiele, um den Lesern ein besseres Verständnis zu ermöglichen. 1. Speicherpfad für den Linux-Kernel-Quellcode Der Linux-Kernel-Quellcode wird in einem Git-Repository namens Linux gespeichert, das unter [https://github.com/torvalds/linux](http://github.com/torvalds/linux) gehostet wird

In Linux-Systemen ist RPM (RedHatPackageManager) ein gängiges Softwarepaket-Verwaltungstool, das zum Installieren, Aktualisieren und Löschen von Softwarepaketen verwendet wird. Manchmal müssen wir den Speicherpfad einer installierten RPM-Datei für Such- oder andere Vorgänge finden. Im Folgenden wird erläutert, wie Sie den Speicherpfad der RPM-Datei im Linux-System finden, und es werden spezifische Codebeispiele bereitgestellt. Zuerst können wir den rpm-Befehl verwenden, um das installierte RPM-Paket und seinen Speicherpfad zu finden. Offen

So verwenden Sie das Modul os.path in Python3.x, um verschiedene Teile des Dateipfads abzurufen. Bei der täglichen Python-Programmierung müssen wir häufig den Dateipfad bearbeiten, z. B. den Dateinamen, das Dateiverzeichnis, die Erweiterung usw. abrufen. des Weges. In Python können Sie das Modul os.path verwenden, um diese Vorgänge auszuführen. In diesem Artikel wird erläutert, wie Sie mit dem Modul os.path verschiedene Teile des Dateipfads für eine bessere Dateibearbeitung abrufen. Das Modul os.path bietet eine Reihe von
