Tutorials  /  JavaScript

Höhe eines Binärbaums in C/C++

Ccentron Redaktion · November 2024 ·5 Min. Lesezeit ·JavaScript, Tutorial

Die Höhe eines Binärbaums wird als die maximale Tiefe eines Blattknotens vom Wurzelknoten aus definiert. Das heißt, es ist die Länge des längsten Pfades vom Wurzelknoten zu einem beliebigen Blattknoten.

Beispiel für einen Binärbaum

Betrachten wir den folgenden Binärbaum.

Binary Tree HtDa die Blattknoten, die der maximalen Tiefe entsprechen, 40 und 50 sind, finden wir die Höhe, indem wir die Anzahl der Kanten vom Wurzelknoten zu einem dieser beiden Knoten zählen, was 3 ergibt.
VM

Passende Infrastruktur bei centron

Node-Anwendungen wollen deployt werden: ccloud³ VMs mit vollem Root-Zugriff ab 3,12 € im Monat – oder gleich als Managed Server, wenn der Betrieb nicht bei Ihnen liegen soll. Cloud Server mieten →

Erstellen eines Algorithmus zur Bestimmung der Höhe eines Binärbaums

Jetzt, da wir wissen, was die Höhe eines Binärbaums bedeutet, werden wir einen Algorithmus entwickeln, um die Höhe eines beliebigen Binärbaums zu bestimmen.

Logik zur Bestimmung der Höhe eines Binärbaums in C/C++

Nun wollen wir die Logik zur Bestimmung der Höhe festlegen und zuerst unseren Pseudocode schreiben.

Wir verwenden Rekursion im Baum, um die Höhe zu bestimmen. (Siehe den Wikipedia-Artikel für die Konzepte)

Da die Höhe des Baums als der größte Pfad von der Wurzel zu einem Blatt definiert ist, können wir die Höhe der linken und rechten Teilbäume rekursiv berechnen.

Wir können die Definition der Höhe jetzt auf die Teilbäume anwenden.

Wir beobachten, dass es das Maximum zwischen dem linken und dem rechten Teilbaum ist, zu dem wir eins addieren.

Da die Höhe des Baums die maximale Höhe des Teilbaums + 1 ist, machen wir so weiter, bis der Teilbaum NULL wird und seine Höhe 0 ist.

An diesem Punkt wird unsere Funktion schließlich beendet, und

Die Funktion tree_height()

Schreiben wir die Funktion tree_height(), die die Höhe berechnet.

Code
// Find height of a tree, defined by the root node
int tree_height(Node* root) {
if (root == NULL) 
return 0;
else {
// Find the height of left, right subtrees
left_height = tree_height(root->left);
right_height = tree_height(root->right);

// Find max(subtree_height) + 1 to get the height of the tree
return max(left_height, right_height) + 1;
}

Zeile #3 überprüft die Abbruchbedingung, wenn die Größe des Teilbaums 0 ist oder wenn der Wurzelknoten NULL ist.

Zeilen 7 und 8 finden rekursiv die Höhe der linken und rechten Teilbäume.

Und schließlich gibt Zeile 11 das Maximum der beiden zurück und damit die Höhe eines Binärbaums.

Implementierung in C/C++

Das Folgende ist ein vollständiges Programm, das zeigt, wie der Binärbaum erstellt wird, und dann die Logik zur Bestimmung der Höhe in tree_height() zeigt, also die Höhe eines Binärbaums in C/C++.

#include <stdio.h>

#include <stdlib.h>

typedef struct Node Node;

// Define the Tree Node here

struct Node {

int value;

// Pointers to the left and right children

Node* left, *right;

};

Node* init_tree(int data) {

// Creates the tree and returns the

// root node

Node* root = (Node*) malloc (sizeof(Node));

root->left = root->right = NULL;

root->value = data;

return root;

}

Node* create_node(int data) {

// Creates a new node

Node* node = (Node*) malloc (sizeof(Node));

node->value = data;

node->left = node->right = NULL;

return node;

}

void free_tree(Node* root) {

// Deallocates memory corresponding

// to every node in the tree.

Node* temp = root;

if (!temp)

return;

free_tree(temp->left);

free_tree(temp->right);

if (!temp->left && !temp->right) {

free(temp);

return;

}

}

int tree_height(Node* root) {

// Get the height of the tree

if (!root)

return 0;

else {

// Find the height of both subtrees

// and use the larger one

int left_height = tree_height(root->left);

int right_height = tree_height(root->right);

if (left_height >= right_height)

return left_height + 1;

else

return right_height + 1;

}

}

int main() {

// Program to demonstrate finding the height of a Binary Tree

// Create the root node having a value of 10

Node* root = init_tree(10);

// Insert nodes onto the tree

root->left = create_node(20);

root->right = create_node(30);

root->left->left = create_node(40);

root->left->right = create_node(50);

// Find the height of the tree

int height = tree_height(root);

printf("Height of the Binary Tree: %d\n", height);

// Free the tree!

free_tree(root);

return 0;

}

Code

Jetzt 200 € Guthaben sichern

Testen Sie Ihr Setup auf ccloud³

Registrieren Sie sich in der ccloud³ und erhalten Sie 200 € Startguthaben für Ihr Projekt – z. B. für eine PostgreSQL-VM mit automatischen Backups.

centron Redaktion Technische Redaktion

Das Redaktionsteam von centron schreibt Anleitungen aus dem Betriebsalltag: getestet auf unserer eigenen Plattform, betrieben im Rechenzentrum in Hallstadt bei Bamberg.

Kategorie JavaScript
Teilen
Noch offene Fragen?

Our team will help you with your specific setup - in German or English, by people who run the platform themselves.

War dieses Tutorial hilfreich?

Your answer is stored anonymously and helps us improve our tutorials.

Kommentare

No comments yet - be the first to ask a question about this tutorial.

Sign in to comment

Comments are open to centron customers. Sign in to your account to ask a question about this tutorial.

Weiterlesen

Das könnte Sie auch interessieren

Jetzt kostenlos anfangen

Melden Sie sich an und erhalten Sie in den ersten 60 Tagen ein Guthaben von 200 € bei centron.

Dieses Werbeangebot gilt nur für neue Konten. Angebot ausschließlich für Gewerbetreibende.

Jetzt loslegen Sales kontaktieren