Heim > Backend-Entwicklung > C++ > Iterative Methode zum Ermitteln der Höhe des Binärbaums

Iterative Methode zum Ermitteln der Höhe des Binärbaums

PHPz
Freigeben: 2023-09-06 09:05:12
nach vorne
655 Leute haben es durchsucht

Iterative Methode zum Ermitteln der Höhe des Binärbaums

Binärbaum ist eine Datenstruktur. Jeder Knoten eines Binärbaums enthält 0, 1 oder 2 Knoten. Daher kann ein Binärbaum mehrere Ebenen enthalten.

Hier müssen wir mithilfe einer Schleife iterativen Code schreiben, um die Höhe des Binärbaums zu ermitteln. Die Gesamtzahl der Ebenen eines Binärbaums stellt die Höhe des Binärbaums dar. Alternativ können wir sagen, dass die maximale Tiefe eines Binärbaums vom Wurzelknoten aus die Höhe des Binärbaums ist.

Problemstellung – Wir erhalten einen Binärbaum. Wir müssen eine iterative Methode verwenden, um die Höhe eines bestimmten Binärbaums zu ermitteln.

Methode 1

Wie oben erwähnt, entspricht die Höhe eines Binärbaums der Gesamtzahl der Ebenen des Binärbaums. Wir werden eine Warteschlangendatenstruktur verwenden, um jeden Knoten jeder Ebene zu durchlaufen und die maximale Tiefe des Baums zu ermitteln.

Algorithmus

Schritt 1 – Definieren Sie die Klasse „treeNode“ und fügen Sie die Ganzzahlvariable „val“ hinzu. Definieren Sie außerdem „linke“ und „rechte“ Zeiger in der Klasse.

Schritt 2 – Definieren Sie die Funktion createNode(), um einen neuen Knoten für den Baum zu erstellen. Es erstellt einen neuen TreeNode, initialisiert „val“ mit dem Parameterwert und initialisiert den linken und rechten Zeiger mit Nullwerten. Geben Sie schließlich den neu erstellten Knoten zurück.

Schritt 3 – Die Funktion findHeight() wird verwendet, um die Höhe des Binärbaums zu ermitteln.

Schritt 4 - Definieren Sie die Warteschlange „levelqueue“, um alle Knoten der aktuellen Ebene, die Variable „treeHeight“, die Variable „n_cnt“ und den Knoten „temp“ zu speichern.

Schritt 5− Wenn der Kopfknoten Null ist, geben Sie 0 zurück.

Schritt 6- Schieben Sie den Hauptknoten in die „levelQueue“.

Schritt 7 – Verwenden Sie eine „while“-Schleife, um zu iterieren, bis die „levelQueue“ leer wird.

Schritt 8- Erhöhen Sie „treeHeight“ um 1 und initialisieren Sie „n_cnt“ mit der Größe der Warteschlange, die die Gesamtzahl der Knoten auf der aktuellen Ebene darstellt.

Schritt 9 – Alle Elemente der Warteschlange durchlaufen.

Schritt 9.1 - Öffnen Sie das erste Element der Warteschlange.

Schritt 9.2 − Wenn der aktuelle Knoten einen linken untergeordneten Knoten hat, fügen Sie ihn in die Warteschlange ein.

Schritt 9.3 − Wenn der aktuelle Knoten einen rechten untergeordneten Knoten hat, fügen Sie ihn in die Warteschlange ein.

Schritt 9.4 - Entfernen Sie den ersten Knoten aus der Warteschlange.

Schritt 10- Geben Sie den Wert der Variablen „treeHeight“ zurück.

Beispiel

#include <iostream>
#include <queue>

using namespace std;
class treeNode {
public:
    int val;
    treeNode *left;
    treeNode *right;
};
treeNode *createNode(int val) {
    //Create a new node
    treeNode *temp = new treeNode();
    temp->val = val;
    temp->left = NULL;
    temp->right = NULL;
    return temp;
}
int fidHeight(treeNode *head) {
    queue<treeNode *> levelQueue;
    int treeHeight = 0; // To store the tree height of the current binary tree
    int n_cnt = 0;      // To store the total number of current level nodes.
    treeNode *temp;     // Pointer to store the address of a node in the current level.
    // For empty binary tree
    if (head == NULL) {
        return 0;
    }
    // Add root node to queue
    levelQueue.push(head);
    // Traverse level of binary tree
    while (!levelQueue.empty()) {
        // For each level increment, the treeHeight of the three
        treeHeight++;
        n_cnt = levelQueue.size();
        // Add child nodes of all nodes at the current level
        while (n_cnt--) {
            temp = levelQueue.front();
            // Insert the left child node of the current node
            if (temp->left != NULL) {
                levelQueue.push(temp->left);
            }
            // Insert the right child node of the current node
            if (temp->right != NULL) {
                levelQueue.push(temp->right);
            }
            // remove the current node
            levelQueue.pop();
        }
    }
    return treeHeight;
}
int main() {
    treeNode *head = NULL;
    // Adding nodes to binary tree.
    head = createNode(45);
    head->right = createNode(32);
    head->right->left = createNode(48);
    head->left = createNode(90);
    head->left->left = createNode(5);
    head->left->left->left = createNode(50);
    cout << "The given binary tree's treeHeight is " << fidHeight(head) << ".";
    return 0;
}
Nach dem Login kopieren

Ausgabe

The given binary tree's treeHeight is 4.
Nach dem Login kopieren

Zeitkomplexität – O(N) zum Durchlaufen jedes Knotens.

Raumkomplexität – O(N) zum Speichern von Knoten in der Warteschlange.

Iterative Methoden sind bei der Lösung eines Problems immer schneller als rekursive Methoden. Hier verwenden wir Schleifen und Warteschlangen, um iterativ die maximale Tiefe oder Höhe eines Binärbaums zu ermitteln. Ein Programmierer könnte jedoch versuchen, eine rekursive Methode zu programmieren, um die Höhe eines Binärbaums zu ermitteln.

Das obige ist der detaillierte Inhalt vonIterative Methode zum Ermitteln der Höhe des Binärbaums. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:tutorialspoint.com
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage