logo

Inorder Traversal

Šiame straipsnyje aptarsime eilės eiliškumą duomenų struktūroje.

Jei norime pereiti mazgus didėjančia tvarka, tada naudojame inorder traversal. Toliau pateikiami žingsniai, reikalingi norint pereiti į eilutę:

  • Aplankykite visus kairiojo pomedžio mazgus
  • Apsilankykite šakniniame mazge
  • Aplankykite visus dešiniojo pomedžio mazgus

Linijinės duomenų struktūros, tokios kaip dėklas, masyvas, eilė ir t. t., turi tik vieną būdą perduoti duomenis. Tačiau hierarchinėse duomenų struktūrose, pvz medis, yra keletas būdų, kaip perkelti duomenis. Čia aptarsime kitą būdą, kaip pereiti medžio duomenų struktūrą, t.

Yra du būdai, kaip pereiti į eilutę:

  • Užsakyti perėjimą naudojant Recursion
  • Inorder perėjimas naudojant iteracinį metodą

Taikoma inorder traversal technika Kairė šaknis dešinė politika. Čia Left Root Right reiškia, kad pirmiausia perkeliamas kairysis šakninio mazgo pomedis, tada šakninis mazgas ir tada dešinysis šakninio mazgo pomedis. Čia pats eilės pavadinimas rodo, kad šakninis mazgas yra tarp kairiojo ir dešiniojo pomedžio.

Aptarsime eilės eiliškumą naudodami rekursinius ir iteracinius metodus. Pirmiausia pradėkime nuo eilės perėjimo naudojant rekursiją.

Inorder perėjimas naudojant rekursiją

 Step 1: Recursively traverse the left subtree Step 2: Now, visit the root Step 3: Traverse the right subtree recursively 

Inorder perėjimo pavyzdys

Dabar pažiūrėkime į eilės tvarką pavyzdį. Naudojant pavyzdį, bus lengviau suprasti įprastos eilės perėjimo procedūrą.

Inorder Traversal

Geltonos spalvos mazgai dar nelankyti. Dabar pereisime aukščiau pateikto medžio mazgus naudodami inorder traversal.

  • Čia 40 yra šakninis mazgas. Perkeliame į kairįjį 40 pomedį, tai yra 30, ir jame taip pat yra 25 pomedis, todėl vėl pereiname prie kairiojo 25 pomedžio, kuris yra 15. Čia 15 pomedžio nėra, taigi spausdinti 15 ir pereikite link pirminio mazgo 25.
    Inorder Traversal
  • Dabar spausdinti 25 ir pereikite į dešinįjį 25 pomedį.
    Inorder Traversal
  • Dabar spausdinti 28 ir pereikite prie šakninio mazgo 25, tai yra 30.
    Inorder Traversal
  • Taigi, lankomas kairysis 30 pomedis. Dabar spausdinti 30 ir pereiti pas dešinįjį 30 metų vaiką.
    Inorder Traversal
  • Dabar spausdinti 35 ir pereikite prie 30 šakninio mazgo.
    Inorder Traversal
  • Dabar spausdinti šakninį mazgą 40 ir pereikite prie jo dešiniojo pomedžio.
    Inorder Traversal
  • Dabar rekursyviai pereikite dešinįjį 40 pomedį, kuris yra 50.
    50 turi pomedį, todėl pirmiausia pereikite per kairįjį 50 pomedį, kuris yra 45. 45 neturi vaikų, todėl Spausdinti 45 ir pereiti į jo šakninį mazgą.
    Inorder Traversal
  • Dabar spausdinti 50 ir pereikite prie dešiniojo 50 pomedžio, kuris yra 60.
    Inorder Traversal
  • Dabar rekursyviai pereikite dešinįjį 50 pomedį, kuris yra 60. 60 turi pomedį, taigi pirmiausia pereikite per kairįjį 60 pomedį, kuris yra 55. 55 neturi vaikų, taigi spausdinti 55 ir pereiti į jo šakninį mazgą.
    Inorder Traversal
  • Dabar spausdinti 60 ir pereikite prie dešiniojo pomedžio 60, tai yra 70.
    Inorder Traversal
  • Dabar spausdinti 70.
    Inorder Traversal

Užbaigus eilės tvarką, galutinis rezultatas yra -

{15, 25, 28, 30, 35, 40, 45, 50, 55, 60, 70}

Inorder perėjimo sudėtingumas

Inorder perėjimo laiko sudėtingumas yra O(n), kur „n“ yra dvejetainio medžio dydis.

java eilutė į int

Tuo tarpu erdvės sudėtingumas tarp eiliškumo yra toks O(1), jei neatsižvelgsime į funkcijų iškvietimų kamino dydį. Priešingu atveju, erdvės sudėtingumas inorder traverza yra Oi), kur „h“ yra medžio aukštis.

Inorder traversal įgyvendinimas

Dabar pažiūrėkime, kaip įgyvendinamas inorder traversal įvairiose programavimo kalbose.

Programa: Parašykite programą, kuri įgyvendintų inorder traversal C kalba.

 #include #include struct node { int element; struct node* left; struct node* right; }; /*To create a new node*/ struct node* createNode(int val) { struct node* Node = (struct node*)malloc(sizeof(struct node)); Node->element = val; Node->left = NULL; Node->right = NULL; return (Node); } /*function to traverse the nodes of binary tree in Inorder*/ void traverseInorder(struct node* root) { if (root == NULL) return; traverseInorder(root->left); printf(' %d ', root->element); traverseInorder(root->right); } int main() { struct node* root = createNode(40); root->left = createNode(30); root->right = createNode(50); root->left->left = createNode(25); root->left->right = createNode(35); root->left->left->left = createNode(15); root->left->left->right = createNode(28); root->right->left = createNode(45); root->right->right = createNode(60); root->right->right->left = createNode(55); root->right->right->right = createNode(70); printf('
 The Inorder traversal of given binary tree is -
'); traverseInorder(root); return 0; } 

Išvestis

Inorder Traversal

Programa: Parašykite programą, kuri įgyvendintų inorder traversal C++.

 #include using namespace std; struct node { int element; struct node* left; struct node* right; }; /*To create a new node*/ struct node* createNode(int val) { struct node* Node = (struct node*)malloc(sizeof(struct node)); Node-&gt;element = val; Node-&gt;left = NULL; Node-&gt;right = NULL; return (Node); } /*function to traverse the nodes of binary tree in Inorder*/ void traverseInorder(struct node* root) { if (root == NULL) return; traverseInorder(root-&gt;left); cout&lt;<' '<element<right); } int main() { struct node* root="createNode(39);" root->left = createNode(29); root-&gt;right = createNode(49); root-&gt;left-&gt;left = createNode(24); root-&gt;left-&gt;right = createNode(34); root-&gt;left-&gt;left-&gt;left = createNode(14); root-&gt;left-&gt;left-&gt;right = createNode(27); root-&gt;right-&gt;left = createNode(44); root-&gt;right-&gt;right = createNode(59); root-&gt;right-&gt;right-&gt;left = createNode(54); root-&gt;right-&gt;right-&gt;right = createNode(69); cout&lt;<'
 the inorder traversal of given binary tree is -
'; traverseinorder(root); return 0; } < pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/15/inorder-traversal-14.webp" alt="Inorder Traversal"> <p> <strong>Program:</strong> Write a program to implement inorder traversal in C#.</p> <pre> using System; class Node { public int value; public Node left, right; public Node(int element) { value = element; left = right = null; } } class BinaryTree { Node root; BinaryTree() { root = null; } void traverseInorder(Node node) { if (node == null) return; traverseInorder(node.left); Console.Write(node.value + &apos; &apos;); traverseInorder(node.right); } void traverseInorder() { traverseInorder(root); } static void Main() { BinaryTree bt = new BinaryTree(); bt.root = new Node(36); bt.root.left = new Node(26); bt.root.right = new Node(46); bt.root.left.left = new Node(21); bt.root.left.right = new Node(31); bt.root.left.left.left = new Node(11); bt.root.left.left.right = new Node(24); bt.root.right.left = new Node(41); bt.root.right.right = new Node(56); bt.root.right.right.left = new Node(51); bt.root.right.right.right = new Node(66); Console.WriteLine(&apos;The Inorder traversal of given binary tree is - &apos;); bt.traverseInorder(); } } </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/15/inorder-traversal-15.webp" alt="Inorder Traversal"> <p> <strong>Program:</strong> Write a program to implement inorder traversal in Java.</p> <pre> class Node { public int value; public Node left, right; public Node(int element) { value = element; left = right = null; } } class InorderTraversal { Node root; InorderTraversal() { root = null; } void traverseInorder(Node node) { if (node == null) return; traverseInorder(node.left); System.out.print(node.value + &apos; &apos;); traverseInorder(node.right); } void traverseInorder() { traverseInorder(root); } public static void main(String args[]) { InorderTraversal pt = new InorderTraversal(); pt.root = new Node(35); pt.root.left = new Node(25); pt.root.right = new Node(45); pt.root.left.left = new Node(20); pt.root.left.right = new Node(30); pt.root.left.left.left = new Node(10); pt.root.left.left.right = new Node(23); pt.root.right.left = new Node(40); pt.root.right.right = new Node(55); pt.root.right.right.left = new Node(50); pt.root.right.right.right = new Node(66); System.out.println(); System.out.println(&apos;The Inorder traversal of given binary tree is - &apos;); pt.traverseInorder(); System.out.println(); } } </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/15/inorder-traversal-16.webp" alt="Inorder Traversal"> <p>So, that&apos;s all about the article. Hope the article will be helpful and informative to you.</p> <hr></'
></'>

Išvestis

Inorder Traversal

Programa: Parašykite programą, kuri įdiegtų inorder traversal Java.

 class Node { public int value; public Node left, right; public Node(int element) { value = element; left = right = null; } } class InorderTraversal { Node root; InorderTraversal() { root = null; } void traverseInorder(Node node) { if (node == null) return; traverseInorder(node.left); System.out.print(node.value + &apos; &apos;); traverseInorder(node.right); } void traverseInorder() { traverseInorder(root); } public static void main(String args[]) { InorderTraversal pt = new InorderTraversal(); pt.root = new Node(35); pt.root.left = new Node(25); pt.root.right = new Node(45); pt.root.left.left = new Node(20); pt.root.left.right = new Node(30); pt.root.left.left.left = new Node(10); pt.root.left.left.right = new Node(23); pt.root.right.left = new Node(40); pt.root.right.right = new Node(55); pt.root.right.right.left = new Node(50); pt.root.right.right.right = new Node(66); System.out.println(); System.out.println(&apos;The Inorder traversal of given binary tree is - &apos;); pt.traverseInorder(); System.out.println(); } } 

Išvestis

Inorder Traversal

Taigi, viskas apie straipsnį. Tikimės, kad straipsnis bus jums naudingas ir informatyvus.