logo

Inorder Traversal

V tomto článku budeme diskutovať o prechode poradia v dátovej štruktúre.

Ak chceme prejsť cez uzly vo vzostupnom poradí, tak použijeme inorder traversal. Nasledujú kroky potrebné na prechod v poradí:

  • Navštívte všetky uzly v ľavom podstrome
  • Navštívte koreňový uzol
  • Navštívte všetky uzly v pravom podstrome

Lineárne dátové štruktúry, ako je zásobník, pole, front atď., majú iba jeden spôsob prechodu dát. Ale v hierarchických dátových štruktúrach ako napr strom, existuje viacero spôsobov, ako prechádzať dátami. Tu budeme diskutovať o ďalšom spôsobe prechodu stromovej dátovej štruktúry, t.j. prechode podľa poradia.

Existujú dva prístupy používané na prechod v poradí:

príkaz touch v linuxe
  • Priebeh poradia pomocou rekurzie
  • Priebeh poradia pomocou iteračnej metódy

Nasleduje technika neriadeného prechodu Ľavý Koreň Pravý politika. Tu Left Root Right znamená, že najprv sa prejde ľavý podstrom koreňového uzla, potom koreňový uzol a potom sa prejde pravý podstrom koreňového uzla. Tu už samotný názov poradia naznačuje, že koreňový uzol sa nachádza medzi ľavým a pravým podstromom.

Budeme diskutovať o inorder traversal pomocou rekurzívnych aj iteračných techník. Začnime najskôr prechodom po poradí pomocou rekurzie.

Priebeh poradia pomocou rekurzie

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

Príklad prechodu poradia

Teraz sa pozrime na príklad prechodu v poradí. Na príklade bude jednoduchšie pochopiť postup prechodu poradia.

Inorder Traversal

Uzly so žltou farbou zatiaľ nie sú navštevované. Teraz budeme prechádzať uzlami vyššie uvedeného stromu pomocou inorder traversal.

  • Tu je 40 koreňový uzol. Presunieme sa do ľavého podstromu 40, to je 30, a má tiež podstrom 25, takže sa opäť presunieme do ľavého podstromu 25, to je 15. Tu 15 nemá žiadny podstrom, takže vytlačiť 15 a posuňte sa smerom k svojmu rodičovskému uzlu, 25.
    Inorder Traversal
  • teraz vytlačiť 25 a presuňte sa do pravého podstromu 25.
    Inorder Traversal
  • teraz vytlačiť 28 a presuňte sa do koreňového uzla 25, čo je 30.
    Inorder Traversal
  • Takže je navštívený ľavý podstrom 30. teraz vytlačiť 30 a presťahovať sa k správnemu dieťaťu vo veku 30 rokov.
    Inorder Traversal
  • teraz vytlačiť 35 a presuňte sa do koreňového uzla 30.
    Inorder Traversal
  • teraz vytlačiť koreňový uzol 40 a presuňte sa do jeho pravého podstromu.
    Inorder Traversal
  • Teraz rekurzívne prejdite pravým podstromom 40, čo je 50.
    50 má podstrom, takže najprv prejdite ľavým podstromom 50, čo je 45. 45 nemá potomkov, takže tlač 45 a presuňte sa do jeho koreňového uzla.
    Inorder Traversal
  • Teraz vytlačiť 50 a presuňte sa do pravého podstromu 50, čo je 60.
    Inorder Traversal
  • Teraz rekurzívne prejdite pravým podstromom 50, čo je 60. 60 má podstrom, takže najprv prejdite ľavým podstromom 60, čo je 55. 55 nemá potomkov, takže vytlačiť 55 a presuňte sa do jeho koreňového uzla.
    Inorder Traversal
  • Teraz tlač 60 a presuňte sa do pravého podstromu 60, čo je 70.
    Inorder Traversal
  • Teraz tlač 70.
    Inorder Traversal

Po dokončení prechodu objednávky je konečný výstup -

očíslovať abecedu

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

Zložitosť prechodu Inorder

Časová zložitosť prechodu Inorder je O(n), kde 'n' je veľkosť binárneho stromu.

Zatiaľ čo priestorová zložitosť prechodu usporiadaním je O(1), ak neberieme do úvahy veľkosť zásobníka pre volania funkcií. V opačnom prípade je priestorová náročnosť prechodu v poriadku O(h), kde 'h' je výška stromu.

Implementácia Inorder traversal

Teraz sa pozrime na implementáciu inorder traversal v rôznych programovacích jazykoch.

Program: Napíšte program na implementáciu prechodu príkazov v jazyku C.

 #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; } 

Výkon

25 zo 100
Inorder Traversal

Program: Napíšte program na implementáciu inorder traversal v 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></'
></'>

Výkon

Inorder Traversal

Program: Napíšte program na implementáciu inorder traversal v Jave.

 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(); } } 

Výkon

linuxové skratky
Inorder Traversal

Tak, to je o článku všetko. Dúfam, že článok bude pre vás užitočný a poučný.