Inhaltsverzeichnis
Einführung
Beispiel
Algorithmus
Ausgabe
Fazit
Heim Backend-Entwicklung C++ Anzahl der Pfade von der Wurzel zu den Blättern mit höchstens M aufeinanderfolgenden Knoten und dem Wert K

Anzahl der Pfade von der Wurzel zu den Blättern mit höchstens M aufeinanderfolgenden Knoten und dem Wert K

Aug 25, 2023 pm 10:45 PM
节点数量 路径数量

Einführung

Binärbaum ist eine faszinierende Datenstruktur mit einem breiten Anwendungsspektrum in der Informatik und Programmierung. Ein interessantes Problem besteht darin, die Anzahl eines gegebenen Baums zu ermitteln, der aus einem übergeordneten Knoten und seinen untergeordneten Knoten besteht. Ein Binärbaum besteht aus Knoten, der Wurzelknoten wird bestimmt und der Wurzelknoten kann entsprechend den Benutzeranforderungen untergeordnete Knoten bereitstellen. Der K-Wert wird bestimmt und die Bewegungsmethode wird durch den M-Wert ausgewählt.

Anzahl der Wurzel-zu-Blatt-Pfade

Das Diagramm wird mithilfe verschiedener Knoten erstellt, die Werte in Form von Ganzzahlen enthalten. Dieser Artikel konzentriert sich hauptsächlich auf das Zählen vom Startknoten oder Wurzelknoten bis zum Blattknoten oder untergeordneten Knoten.

Beispiel

Der Graph wird aus einem Binärbaum mit verschiedenen Knoten erstellt.

Anzahl der Pfade von der Wurzel zu den Blättern mit höchstens M aufeinanderfolgenden Knoten und dem Wert K

  • Im obigen Binärbaum wird der Wurzelknoten als „8“ ausgewählt.

  • Dann erstellen Sie zwei Knoten, einen mit dem Wert 3 und den anderen mit dem Wert 10, die die linke und rechte Position des Wurzelknotens einnehmen.

  • Nehmen Sie den Knoten mit dem Wert 2 als Wurzel und erstellen Sie einen weiteren untergeordneten Knoten mit den Werten 2 und 1 als linken bzw. rechten Knoten.

  • Schließlich erstellt der untergeordnete Knoten mit dem Wert 1 einen untergeordneten Knoten mit dem Wert -4.

Methode 1: C++-Code zur Berechnung eines Wurzel-zu-Blatt-Pfads, der aus bis zu M aufeinanderfolgenden Knoten mit K Werten besteht, mithilfe einer rekursiven Funktion

Um dieses Problem effizient zu lösen, verwenden wir grundlegende Konzepte wie den Baumdurchquerungsalgorithmus und die Rekursion.

Algorithmus

Schritt 1: Erstellen Sie eine Struktur zur Darstellung des Baumknotens, die zwei Zeiger (linker untergeordneter Knoten und rechter untergeordneter Knoten) und ein Ganzzahlfeld zum Speichern des Knotenwerts enthält.

Schritt 2: Entwerfen Sie eine rekursive Funktion, um den Binärbaum ausgehend von der Wurzel zu durchlaufen und dabei die aktuelle Pfadlänge (initialisiert auf 0), die Anzahl aufeinanderfolgender Vorkommen (ursprünglich auf 0 gesetzt), den Zielwert K usw. zu verfolgen die maximal zulässige Anzahl aufeinanderfolgender Vorkommen M .

Schritt 3: Rufen Sie die Funktion rekursiv für jeden linken und rechten Teilbaum auf und übergeben Sie dabei aktualisierte Parameter wie die inkrementelle Pfadlänge und die Anzahl aufeinanderfolgender Vorkommen (falls zutreffend).

Schritt 4: Für jeden nicht leeren Knoten, der während der Durchquerung besucht wird:

a) Wenn sein Wert gleich K ist, addieren Sie eins zu beiden Variablen.

b) Setzen Sie die Variable auf Null zurück, wenn ihr Wert nicht mit K übereinstimmt oder die Anzahl der aufeinanderfolgenden Vorkommen von M überschreitet, die bisher im Pfad aufgetreten sind.

Schritt 5: Wenn der untergeordnete Knoten beim Durchlaufen des Baums sowohl im linken als auch im rechten Fall einen Wert von Null hat, können wir auf zwei Arten damit umgehen, d. h.

a) Überprüfen Sie, ob die Variable M nicht überschreitet.

b) Wenn ja, erhöhen Sie die Gesamtzahl der Pfade, die die Bedingung erfüllen, um 1.

Beispiel

//including the all in one header
#include<bits/stdc++.h>
using namespace std;
//creating structure with two pointers as up and down
struct Vertex {
   int data;
   struct Vertex* up;
   struct Vertex* down;
};
//countPaths function declared with five arguments ; with root = end; Node= vertex; left = up; right = down
int countPaths(Vertex* end, int K, int M, int currCount, int 
consCount) {
//To check the condition when the root is equal to 1 and greater than the maximum value, the values is incremented
   if (end == NULL || consCount > M) {
      return 0;
   }
//To check when the root is equal to the K value, increment by 1
   if (end->data == K) {
      currCount++;
      consCount++;
   } else {
//If it is not equal, it will return 0
      currCount = 0;
   }
   if (end->up == NULL && end->down == NULL) {
      if (currCount <= M) {
         return 1;
      } else {
         return 0;
      }
   }
   return countPaths(end->up, K, M, currCount, consCount) + countPaths(end->down, K, M, currCount, consCount);
}
//Main function to test the implementation
int main() {
   Vertex* end = new Vertex();
   end->data = 8;
   end->up = new Vertex();
   end->up->data = 3;
   end->down = new Vertex();
   end->down->data = 10;
   end->up->up = new Vertex();
   end->up->up->data = 2;
   end->up->down = new Vertex();
   end->up->down->data = 1;
   end->up->down->up = new Vertex();
   end->up->down->up->data = -4;

   int K = 1; // Value of node
   int M = 2; // Maximum consecutive nodes
   int currCount = -1; // Current count
   int consCount = -1; // Consecutive count

   cout << "The number of paths obtained from the given graph of" << M << "nodes with a value of " << K << " is " << countPaths(end, K, M, currCount, consCount) << endl;

   return 0;
} 
Nach dem Login kopieren

Ausgabe

The number of paths obtained from the given graph of 2 nodes with a value of 1 is 3
Nach dem Login kopieren

Fazit

In diesem Artikel untersuchen wir das Problem der Zählung der Anzahl der Pfade von der Spitze (d. h. dem Blatt) bis zur Spitze oder Wurzel. Solche Probleme können durch den Einsatz von Baumdurchlaufalgorithmen und rekursiven Techniken in C++ effizient gelöst werden. Das Durchlaufen eines Binärbaums mag schwierig erscheinen, anhand von Beispielen wird es jedoch einfacher.

Das obige ist der detaillierte Inhalt vonAnzahl der Pfade von der Wurzel zu den Blättern mit höchstens M aufeinanderfolgenden Knoten und dem Wert K. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist ein MD5-Hashwert? Was ist ein MD5-Hashwert? Feb 18, 2024 pm 08:50 PM

Was ist der MD5-Wert? In der Informatik ist MD5 (MessageDigestAlgorithm5) eine häufig verwendete Hash-Funktion zum Verdauen oder Verschlüsseln von Nachrichten. Es erzeugt eine 128-Bit-Binärzahl fester Länge, die normalerweise im 32-Bit-Hexadezimalformat dargestellt wird. Der MD5-Algorithmus wurde 1991 von Ronald Rivest entwickelt. Obwohl der MD5-Algorithmus im Bereich der Kryptographie als nicht mehr sicher gilt, wird er immer noch häufig zur Datenintegritätsprüfung und Dateiprüfung eingesetzt.

PHP-Wertanalyse: Detaillierte Erläuterung des Konzepts und der Anwendung von Werten in PHP PHP-Wertanalyse: Detaillierte Erläuterung des Konzepts und der Anwendung von Werten in PHP Mar 21, 2024 pm 09:06 PM

PHP-Wertanalyse: Detaillierte Erläuterung des Konzepts und der Anwendung von Werten in PHP In der PHP-Programmierung ist Wert ein sehr grundlegendes und wichtiges Konzept. In diesem Artikel werden wir uns eingehend mit dem Wertekonzept in PHP und seiner Anwendung in der realen Programmierung befassen. Wir werden grundlegende Werttypen, Variablen, Arrays, Objekte und Konstanten usw. im Detail analysieren und spezifische Codebeispiele bereitstellen, um den Lesern zu helfen, Werte in PHP besser zu verstehen und zu verwenden. Grundwerttypen In PHP gehören zu den häufigsten Grundwerttypen Ganzzahl, Gleitkomma, Zeichenfolge, Boolescher Wert und Null. Diese grundlegenden

Entdecken Sie unadressierbare Werte in Go Entdecken Sie unadressierbare Werte in Go Mar 25, 2024 am 09:33 AM

In der Go-Sprache sind einige Werte nicht adressierbar, dh ihre Speicheradressen können nicht abgerufen werden. Zu diesen Werten gehören Konstanten, Literale und Ausdrücke, die nicht adressiert werden können. In diesem Artikel werden wir diese nicht adressierbaren Werte untersuchen und ihre Eigenschaften anhand konkreter Codebeispiele verstehen. Schauen wir uns zunächst einige Beispiele für Konstanten an. In der Go-Sprache sind Konstanten nicht adressierbar, da ihre Werte zur Kompilierungszeit ermittelt werden und es keine Laufzeitspeicheradresse für den Zugriff gibt. Hier ist ein Beispielcode: packagemaini

Ermitteln Sie beim Programmieren in C++ die Anzahl der Pfade von einem Punkt zu einem anderen in einem Raster Ermitteln Sie beim Programmieren in C++ die Anzahl der Pfade von einem Punkt zu einem anderen in einem Raster Aug 29, 2023 pm 10:25 PM

In diesem Artikel erhalten wir ein Problem, bei dem wir die Gesamtzahl der Pfade von Punkt A zu Punkt B ermitteln müssen, wobei A und B feste Punkte sind, d. h. A ist der obere linke Eckpunkt im Gitter und B der untere rechter Eckpunkt, zum Beispiel −Input:N=5Output:252Input:N=4Output:70Input:N=3Output:20 In dem gegebenen Problem können wir die Antwort formalisieren und das Ergebnis durch einfache Beobachtungen ableiten. Methode zur Lösungsfindung Bei dieser Methode leiten wir eine Formel ab, indem wir beobachten, dass wir beim Überqueren des Gitters von A nach B n-mal nach rechts und n-mal nach unten gehen müssen, was bedeutet, dass wir alle möglichen Pfadkombinationen finden müssen, also erhalten wir

Optionale Klasse in Java 8: So filtern Sie mögliche Nullwerte mit der Methode filter() Optionale Klasse in Java 8: So filtern Sie mögliche Nullwerte mit der Methode filter() Aug 01, 2023 pm 05:27 PM

Optionale Klasse in Java8: So verwenden Sie die filter()-Methode, um möglicherweise Nullwerte zu filtern. In Java8 ist die optionale Klasse ein sehr nützliches Werkzeug, das es uns ermöglicht, möglicherweise Nullwerte besser zu verarbeiten und das Auftreten von NullPointerException zu vermeiden. Die optionale Klasse bietet viele Methoden zum Bearbeiten potenzieller Nullwerte. Eine der wichtigen Methoden ist filter(). Die Funktion der filter()-Methode ist die if-Option

Ermitteln Sie mit C++ die Anzahl der Pfade mit der Gewichtung W in einem K-ary-Baum Ermitteln Sie mit C++ die Anzahl der Pfade mit der Gewichtung W in einem K-ary-Baum Sep 16, 2023 pm 06:09 PM

In diesem Artikel verwenden wir C++, um die Anzahl der Pfade mit der Gewichtung W in einem K-ary-Baum zu zählen. Uns wurde ein K-ary-Baum gegeben, ein Baum, in dem jeder Knoten K Kinder hat und jede Kante ein Gewicht hat, wobei das Gewicht von 1 auf K von einem Knoten zu allen seinen Kindern abnimmt. Wir müssen die kumulative Anzahl der Pfade zählen, die vom Wurzelknoten ausgehen und die Gewichtung W und mindestens eine Kante mit der Gewichtung M haben. Hier ist ein Beispiel: Input:W=4,K=3,M=2Output:6 Im gegebenen Problem werden wir dp verwenden, um die zeitliche und räumliche Komplexität zu reduzieren. Durch die Memoisierung können wir unsere Programme schneller machen und sie an größere Einschränkungen anpassen. Methode In dieser Methode durchlaufen wir den Baum und verfolgen die Verwendung von

Entdecken Sie den Charme von Java Map und lösen Sie die Probleme der Datenverarbeitung Entdecken Sie den Charme von Java Map und lösen Sie die Probleme der Datenverarbeitung Feb 19, 2024 pm 07:03 PM

Erklärung von Map Map ist eine Datenstruktur, mit der Sie Schlüssel-Wert-Paare speichern können. Die Schlüssel sind eindeutig und die Werte können beliebige Objekttypen sein. Die Map-Schnittstelle bietet Methoden zum Speichern und Abrufen von Schlüssel-Wert-Paaren und ermöglicht das Durchlaufen der Schlüssel-Wert-Paare in der Map. Map-Typen Es gibt verschiedene Implementierungen von Map in Java. Die häufigsten sind HashMap, TreeMap und LinkedHashMap. HashMap: Eine auf einer Hash-Tabelle basierende Map-Implementierung, die die Eigenschaften einer schnellen Suche, Einfügung und Löschung aufweist, aber nicht geordnet ist, was bedeutet, dass die Reihenfolge der Schlüssel-Wert-Paare in der Map willkürlich bestimmt wird. TreeMap: Eine Kartenimplementierung, die auf rot-schwarzen Bäumen basiert und die Eigenschaften einer schnellen Suche, Einfügung und Löschung aufweist

Was passiert, wenn ein Wert in JavaScript in einen booleschen Wert konvertiert wird? Was passiert, wenn ein Wert in JavaScript in einen booleschen Wert konvertiert wird? Sep 02, 2023 am 09:21 AM

Konvertieren Sie ihn mit der Methode Boolean() in JavaScript in einen booleschen Wert. Sie können versuchen, den folgenden Code auszuführen, um zu verstehen, wie Sie [50,100] in JavaScript in einen booleschen Wert konvertieren. Beispiel einer Echtzeitdemonstration<!DOCTYPEhtml><html> <body> <p>Convert[50,100]toBoolean</p> &

See all articles