logo

Инордер Траверсал

У овом чланку ћемо разговарати о обиласку у нередовном реду у структури података.

Ако желимо да пређемо чворове у растућем редоследу, онда користимо прелазак у нередовном реду. Следе кораци који су потребни за прелазак по редоследу:

  • Посетите све чворове у левом подстаблу
  • Посетите основни чвор
  • Посетите све чворове у десном подстаблу

Линеарне структуре података као што су стек, низ, ред, итд., имају само један начин да прелазе податке. Али у хијерархијским структурама података као нпр дрво, постоји више начина да се пређу подаци. Овде ћемо разговарати о другом начину преласка структуре података стабла, тј.

Постоје два приступа која се користе за прелазак у редослед:

  • Прелазак у ред помоћу рекурзије
  • Прелазак у редослед коришћењем Итеративне методе

Техника преласка у редослед прати Лево Роот Десно политика. Овде, Лефт Роот Ригхт значи да се прво прелази лево подстабло коренског чвора, затим коренски чвор, а затим се прелази десно подстабло коренског чвора. Овде, само име у реду сугерише да се коренски чвор налази између левог и десног подстабла.

Разговараћемо о обиласку у нередовном реду користећи и рекурзивне и итеративне технике. Почнимо са обиласком у нередовном реду користећи рекурзију.

Прелазак у редослед коришћењем рекурзије

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

Пример преласка у редослед

Сада, хајде да видимо пример преласка у неред. Биће лакше разумети процедуру обилажења по редоследу користећи пример.

иф елсе изјаве јава
Инордер Траверсал

Чворови жуте боје још нису посећени. Сада ћемо прећи преко чворова горњег стабла користећи прелазак у редослед.

  • Овде, 40 је основни чвор. Прелазимо на лево подстабло од 40, то је 30, и оно такође има подстабло 25, па се поново крећемо на лево подстабло од 25 што је 15. Овде 15 нема подстабло, тако да штампа 15 и помери се ка свом родитељском чвору, 25.
    Инордер Траверсал
  • Сада, штампа 25 и померите се на десно подстабло од 25.
    Инордер Траверсал
  • Сада, штампа 28 и пређите на основни чвор од 25, што је 30.
    Инордер Траверсал
  • Дакле, посећено је лево подстабло од 30. Сада, штампа 30 и пређите на десно дете од 30 година.
    Инордер Траверсал
  • Сада, штампа 35 и пређите на основни чвор од 30.
    Инордер Траверсал
  • Сада, штампај основни чвор 40 и померите се на његово десно подстабло.
    Инордер Траверсал
  • Сада рекурзивно пређите десно подстабло од 40 што је 50.
    50 има подстабло, тако да прво пређите лево подстабло од 50 које је 45. 45 нема деце, па штампа 45 и померите се до његовог коренског чвора.
    Инордер Траверсал
  • Сада штампа 50 и померите се на десно подстабло од 50, односно 60.
    Инордер Траверсал
  • Сада рекурзивно пређите десно подстабло од 50 које је 60. 60 има подстабло, тако да прво пређите лево подстабло од 60 које је 55. 55 нема деце, тако да штампа 55 и помери се на његов коренски чвор.
    Инордер Траверсал
  • Сада штампа 60 и померите се на десно подстабло од 60, односно 70.
    Инордер Траверсал
  • Сада штампа 70.
    Инордер Траверсал

Након завршетка обиласка по редоследу, коначни излаз је -

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

Сложеност обиласка Инордер-а

Временска сложеност обиласка Инордер-а је На), где је 'н' величина бинарног стабла.

Док је просторна сложеност нередовног преласка О(1), ако не узмемо у обзир величину стека за позиве функција. Иначе, просторна сложеност обилажења у нередовном реду је О(х), где је 'х' висина дрвета.

маркдовн прецртано

Имплементација преласка Инордер-а

Сада, хајде да видимо имплементацију обиласка по редоследу у различитим програмским језицима.

Програм: Написати програм за имплементацију обиласка у нередовном реду у језику Ц.

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

Излаз

Инордер Траверсал

Програм: Напишите програм за имплементацију обиласка у нередовном реду у Ц++.

 #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></'
></'>

Излаз

Инордер Траверсал

Програм: Напишите програм за имплементацију обилажења нередом у Јави.

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

Излаз

Инордер Траверсал

Дакле, то је све о чланку. Надамо се да ће вам чланак бити користан и информативан.