logo

Inorder-Durchquerung des Binärbaums

Inorder-Durchquerung ist als eine Art von definiert Baumdurchquerungstechnik das dem Links-Wurzel-Rechts-Muster folgt, so dass:

  • Der linke Teilbaum wird zuerst durchlaufen
  • Dann wird der Wurzelknoten für diesen Teilbaum durchlaufen
  • Abschließend wird der rechte Teilbaum durchlaufen
Inorder-Durchquerung

Inorder-Durchquerung



Algorithmus für die Inorder-Traversierung des Binärbaums

Der Algorithmus für die Inorder-Traversierung wird wie folgt dargestellt:

Inorder(root):

  1. Befolgen Sie die Schritte 2 bis 4, bis root != NULL ist
  2. Inorder (Wurzel -> links)
  3. Root -> Daten schreiben
  4. Inorder (root -> rechts)
  5. Schleife beenden

Wie funktioniert die Inorder-Traversierung des Binärbaums?

Betrachten Sie den folgenden Baum:



Beispiel eines Binärbaums

Beispiel eines Binärbaums

Wenn wir in diesem Binärbaum eine Inorder-Traversierung durchführen, sieht die Traversierung wie folgt aus:

Schritt 1: Die Durchquerung erfolgt von 1 zu seinem linken Teilbaum, d. h. 2, dann von 2 zu seiner linken Teilbaumwurzel, d. h. 4. Jetzt hat 4 keinen linken Teilbaum, also wird er besucht. Es gibt auch keinen rechten Teilbaum. Also keine Durchquerung mehr von 4



Knoten 4 wird besucht

Knoten 4 wird besucht

Schritt 2: Da der linke Teilbaum von Knoten 2 vollständig besucht ist, liest er nun die Daten von Knoten 2, bevor er zu seinem rechten Teilbaum wechselt.

Knoten 2 wird besucht

Knoten 2 wird besucht

Schritt 3: Jetzt wird der rechte Teilbaum von 2 durchlaufen, d. h. zu Knoten 5 verschoben. Für Knoten 5 gibt es keinen linken Teilbaum, daher wird er besucht und danach kommt die Durchquerung zurück, da es keinen rechten Teilbaum von Knoten 5 gibt.

Knoten 5 wird besucht

Knoten 5 wird besucht

Schritt 4: Da es sich um den linken Teilbaum von Knoten 1 handelt, wird die Wurzel selbst, also Knoten 1, besucht.

Knoten 1 wird besucht

Knoten 1 wird besucht

Schritt 5: Linker Teilbaum von Knoten 1 und der Knoten selbst wird besucht. Jetzt wird also der rechte Teilbaum von 1 durchlaufen, d. h. zu Knoten 3 verschoben. Da Knoten 3 keinen linken Teilbaum hat, wird er besucht.

Knoten 3 wird besucht

Knoten 3 wird besucht

Schritt 6: Der linke Teilbaum von Knoten 3 und der Knoten selbst werden besucht. Gehen Sie also zum rechten Teilbaum und besuchen Sie Knoten 6. Nun endet die Durchquerung, da alle Knoten durchlaufen wurden.

Der komplette Baum wird durchlaufen

Der komplette Baum wird durchlaufen

Die Reihenfolge der Knotendurchquerung ist also 4 -> 2 -> 5 -> 1 -> 3 -> 6 .

Programm zur Implementierung von Inorder Traversal of Binary Tree:

Nachfolgend finden Sie die Code-Implementierung der Inorder-Traversierung:

C++


römische Ziffern 1 100



// C++ program for inorder traversals> #include> using> namespace> std;> // Structure of a Binary Tree Node> struct> Node {> >int> data;> >struct> Node *left, *right;> >Node(>int> v)> >{> >data = v;> >left = right = NULL;> >}> };> // Function to print inorder traversal> void> printInorder(>struct> Node* node)> {> >if> (node == NULL)> >return>;> >// First recur on left subtree> >printInorder(node->links);> >// Now deal with the node> >cout ' '; // Then recur on right subtree printInorder(node->Rechts); } // Treibercode int main() { struct Node* root = new Node(1); root->left = new Node(2); root->right = new Node(3); root->left->left = new Node(4); root->left->right = new Node(5); root->right->right = new Node(6); // Funktionsaufruf cout<< 'Inorder traversal of binary tree is: '; printInorder(root); return 0; }>

>

>

Java




// Java program for inorder traversals> import> java.util.*;> // Structure of a Binary Tree Node> class> Node {> >int> data;> >Node left, right;> >Node(>int> v)> >{> >data = v;> >left = right =>null>;> >}> }> // Main class> class> GFG {> >// Function to print inorder traversal> >public> static> void> printInorder(Node node)> >{> >if> (node ==>null>)> >return>;> >// First recur on left subtree> >printInorder(node.left);> >// Now deal with the node> >System.out.print(node.data +>' '>);> >// Then recur on right subtree> >printInorder(node.right);> >}> >// Driver code> >public> static> void> main(String[] args)> >{> >Node root =>new> Node(>1>);> >root.left =>new> Node(>2>);> >root.right =>new> Node(>3>);> >root.left.left =>new> Node(>4>);> >root.left.right =>new> Node(>5>);> >root.right.right =>new> Node(>6>);> >// Function call> >System.out.println(> >'Inorder traversal of binary tree is: '>);> >printInorder(root);> >}> }> // This code is contributed by prasad264>

>

>

Python3




Eingabe einer Zeichenfolge in Java
# Structure of a Binary Tree Node> class> Node:> >def> __init__(>self>, v):> >self>.data>=> v> >self>.left>=> None> >self>.right>=> None> # Function to print inorder traversal> def> printInorder(node):> >if> node>is> None>:> >return> ># First recur on left subtree> >printInorder(node.left)> ># Now deal with the node> >print>(node.data, end>=>' '>)> ># Then recur on right subtree> >printInorder(node.right)> # Driver code> if> __name__>=>=> '__main__'>:> >root>=> Node(>1>)> >root.left>=> Node(>2>)> >root.right>=> Node(>3>)> >root.left.left>=> Node(>4>)> >root.left.right>=> Node(>5>)> >root.right.right>=> Node(>6>)> ># Function call> >print>(>'Inorder traversal of binary tree is:'>)> >printInorder(root)>

>

>

C#




// C# program for inorder traversals> using> System;> // Structure of a Binary Tree Node> public> class> Node {> >public> int> data;> >public> Node left, right;> >public> Node(>int> v)> >{> >data = v;> >left = right =>null>;> >}> }> // Class to store and print inorder traversal> public> class> BinaryTree {> >// Function to print inorder traversal> >public> static> void> printInorder(Node node)> >{> >if> (node ==>null>)> >return>;> >// First recur on left subtree> >printInorder(node.left);> >// Now deal with the node> >Console.Write(node.data +>' '>);> >// Then recur on right subtree> >printInorder(node.right);> >}> >// Driver code> >public> static> void> Main()> >{> >Node root =>new> Node(1);> >root.left =>new> Node(2);> >root.right =>new> Node(3);> >root.left.left =>new> Node(4);> >root.left.right =>new> Node(5);> >root.right.right =>new> Node(6);> >// Function call> >Console.WriteLine(> >'Inorder traversal of binary tree is: '>);> >printInorder(root);> >}> }>

>

>

Javascript




// JavaScript program for inorder traversals> // Structure of a Binary Tree Node> class Node {> >constructor(v) {> >this>.data = v;> >this>.left =>null>;> >this>.right =>null>;> >}> }> // Function to print inorder traversal> function> printInorder(node) {> >if> (node ===>null>) {> >return>;> >}> > >// First recur on left subtree> >printInorder(node.left);> > >// Now deal with the node> >console.log(node.data);> > >// Then recur on right subtree> >printInorder(node.right);> }> // Driver code> const root =>new> Node(1);> root.left =>new> Node(2);> root.right =>new> Node(3);> root.left.left =>new> Node(4);> root.left.right =>new> Node(5);> root.right.right =>new> Node(6);> // Function call> console.log(>'Inorder traversal of binary tree is: '>);> printInorder(root);>

>

>

Ausgabe

Inorder traversal of binary tree is: 4 2 5 1 3 6>

Erläuterung:

string.substring Java
Wie Inorder-Traversal funktioniert

Wie Inorder-Traversal funktioniert

Komplexitätsanalyse:

Zeitkomplexität: O(N) wobei N die Gesamtzahl der Knoten ist. Weil es alle Knoten mindestens einmal durchläuft.
Hilfsraum: O(1), wenn kein Rekursionsstapelplatz berücksichtigt wird. Ansonsten O(h), wobei h die Höhe des Baums ist

  • Im schlimmsten Fall, H kann dasselbe sein wie N (wenn der Baum ein schiefer Baum ist)
  • Im besten Fall, H kann dasselbe sein wie ruhig (wenn der Baum ein vollständiger Baum ist)

Anwendungsfälle von Inorder Traversal:

Wenn im Fall von BST (Binary Search Tree) zu irgendeinem Zeitpunkt die Notwendigkeit besteht, die Knoten in nicht absteigender Reihenfolge abzurufen, ist es am besten, eine Durchquerung in der Reihenfolge zu implementieren.

In Verbindung stehende Artikel:

  • Arten von Baumdurchquerungen
  • Iterative Inorder-Traversierung
  • Konstruieren Sie einen Binärbaum aus der Vorbestellungs- und Inorder-Traversierung
  • Morris-Durchquerung für die Durchquerung eines Baumes in geordneter Reihenfolge
  • Inorder-Traversal ohne Rekursion