logo

Obilaženje stabla (redom, unaprijed i naknadno)

U ovom ćemo članku raspravljati o obilasku stabla u strukturi podataka. Pojam 'prolaženje stabla' znači obilaženje ili posjećivanje svakog čvora stabla. Postoji jedan način za prolazak kroz strukturu linearnih podataka kao što su povezani popis, red čekanja i stog. S druge strane, postoji više načina za prelazak stabla koji su navedeni kako slijedi -

  • Prolazak unaprijed
  • Prolaz po neredu
  • Prolaz poštanskih naloga

Stoga ćemo u ovom članku raspravljati o gore navedenim tehnikama obilaska stabla. Sada, počnimo raspravljati o načinima obilaska stabla.

Prolazak unaprijed

Ova tehnika slijedi politiku 'root lijevo desno'. To znači da se posjećuje prvi korijenski čvor nakon čega se rekurzivno obilazi lijevo podstablo i na kraju se rekurzivno obilazi desno podstablo. Budući da se korijenski čvor obilazi prije (ili prije) lijevog i desnog podstabla, to se naziva obilaskom predreda.

Dakle, u obilasku prednarudžbe, svaki se čvor posjećuje prije oba svoja podstabla.

Primjene prelaska prednarudžbe uključuju -

  • Koristi se za stvaranje kopije stabla.
  • Također se može koristiti za dobivanje prefiksnog izraza stabla izraza.

Algoritam

 Until all nodes of the tree are not visited Step 1 - Visit the root node Step 2 - Traverse the left subtree recursively. Step 3 - Traverse the right subtree recursively. 

Primjer

Pogledajmo sada primjer tehnike obilaska prednarudžbe.

Obilazak stabla

Sada počnite primjenjivati ​​prelazak prednarudžbe na gore navedeno stablo. Prvo prelazimo korijenski čvor A; nakon toga, pomaknite se na njegovo lijevo podstablo B , koji će se također proći u prednarudžbi.

Dakle, za lijevo podstablo B, prvo, korijenski čvor B prolazi se sama; nakon toga, njegovo lijevo podstablo D se prelazi. Budući da čvor D nema djece, pomakni se na desno podstablo I . Kako čvor E također nema djece, obilazak lijevog podstabla korijenskog čvora A je dovršen.

kako pretvoriti string u char

Sada se pomaknite prema desnom podstablu korijenskog čvora A koji je C. Dakle, za desno podstablo C, prvo korijenski čvor C prešao je sam sebe; nakon toga, njegovo lijevo podstablo F se prelazi. Budući da čvor F nema djece, pomaknite se na desno podstablo G . Kako čvor G također nema djece, obilazak desnog podstabla korijenskog čvora A je dovršen.

Stoga se prelaze svi čvorovi stabla. Dakle, izlaz obilaska prednarudžbe gornjeg stabla je -

A → B → D → E → C → F → G

Da biste saznali više o prolasku prednarudžbe u strukturi podataka, možete slijediti poveznicu Prolazak unaprijed .

Prolaz poštanskih naloga

Ova tehnika slijedi politiku 'lijevo-desno korijenje'. To znači da se obilazi prvo lijevo podstablo korijenskog čvora, nakon toga se rekurzivno obilazi desno podstablo i na kraju se obilazi korijenski čvor. Budući da se korijenski čvor obilazi nakon (ili nakon) lijevog i desnog podstabla, to se naziva postorder obilaskom.

Dakle, u obilasku postordera, svaki se čvor posjećuje nakon oba svoja podstabla.

broj abecede

Primjene postorder traverzacije uključuju -

  • Koristi se za brisanje stabla.
  • Također se može koristiti za dobivanje postfiksnog izraza stabla izraza.

Algoritam

 Until all nodes of the tree are not visited Step 1 - Traverse the left subtree recursively. Step 2 - Traverse the right subtree recursively. Step 3 - Visit the root node. 

Primjer

Sada, pogledajmo primjer tehnike obilaska postordera.

Obilazak stabla

Sada počnite primjenjivati ​​postorder traversal na gore navedeno stablo. Najprije obilazimo lijevo podstablo B koje će se obilaziti naknadno. Nakon toga ćemo prijeći desno podstablo C u postorderu. I konačno, korijenski čvor gornjeg stabla, tj. A , prelazi se.

java inicijalizirati niz

Dakle, za lijevo podstablo B, prvo, njegovo lijevo podstablo D se prelazi. Budući da čvor D nema djece, prijeđite desnim podstablom I . Kako čvor E također nema djece, prijeđite na korijenski čvor B. Nakon prelaženja čvora B, obilazak lijevog podstabla korijenskog čvora A je završen.

Sada se pomaknite prema desnom podstablu korijenskog čvora A koji je C. Dakle, za desno podstablo C, prvo lijevo podstablo F se prelazi. Budući da čvor F nema djece, prijeđite desnim podstablom G . Kako čvor G također nema djecu, stoga, konačno, korijenski čvor desnog podstabla, tj. C, se prelazi. Obilazak desnog podstabla korijenskog čvora A je završen.

Na kraju, pređite korijenski čvor datog stabla, tj. A . Nakon obilaženja korijenskog čvora, dovršeno je naknadno obilaženje danog stabla.

Stoga se prelaze svi čvorovi stabla. Dakle, izlaz naknadnog obilaska gornjeg stabla je -

D → E → B → F → G → C → A

Da biste saznali više o obilasku postordera u strukturi podataka, možete slijediti vezu Prolaz poštanskih naloga .

Prolaz po neredu

Ova tehnika slijedi politiku 'lijevo korijen desno'. To znači da se prvo lijevo podstablo posjećuje nakon što se obiđe korijenski čvor, a na kraju se obiđe desno podstablo. Budući da se korijenski čvor obilazi između lijevog i desnog podstabla, naziva se obilaskom po redoslijedu.

Dakle, u obilasku po redoslijedu, svaki se čvor posjećuje između svojih podstabala.

Primjene Inorder traversal uključuju -

  • Koristi se za dobivanje BST čvorova u rastućem redoslijedu.
  • Također se može koristiti za dobivanje prefiksnog izraza stabla izraza.

Algoritam

 Until all nodes of the tree are not visited Step 1 - Traverse the left subtree recursively. Step 2 - Visit the root node. Step 3 - Traverse the right subtree recursively. 

Primjer

Pogledajmo sada primjer tehnike obilaska Inorder.

Obilazak stabla

Sada počnite primjenjivati ​​obilazak po redoslijedu na gore navedeno stablo. Prvo prelazimo lijevo podstablo B koji će se prelaziti redom. Nakon toga ćemo prijeći korijenski čvor A . I konačno, desno podstablo C prelazi se redom.

Dakle, za lijevo podstablo B , prvo, njegovo lijevo podstablo D se prelazi. Budući da čvor D nema djece, pa nakon što ga obiđete, čvor B će se prijeći, i na kraju, desno podstablo čvora B, tj I , prelazi se. Čvor E također nema djece; dakle, obilazak lijevog podstabla korijenskog čvora A je završen.

Nakon toga, obiđite korijenski čvor datog stabla, tj. A .

Na kraju, pomaknite se prema desnom podstablu korijenskog čvora A koji je C. Dakle, za desno podstablo C; prvo, njegovo lijevo podstablo F se prelazi. Budući da čvor F nema djece, čvor C će se prijeći, i na kraju, desno podstablo čvora C, to jest, G , prelazi se. Čvor G također nema djece; dakle, obilazak desnog podstabla korijenskog čvora A je završen.

Kako se obiđu svi čvorovi stabla, obilazak po redoslijedu zadanog stabla je završen. Izlaz obilaženja po redoslijedu gornjeg stabla je -

D → B → E → A → F → C → G

Da biste saznali više o obilasku po redoslijedu u strukturi podataka, možete slijediti poveznicu Inorder Traversal .

kako inicijalizirati niz u Javi

Složenost tehnika obilaska stabla

Vremenska složenost tehnika obilaska stabla o kojima se gore raspravljalo je Na) , gdje 'n' je veličina binarnog stabla.

Dok je prostorna složenost tehnika obilaska stabala o kojima se gore raspravljalo O(1) ako ne uzmemo u obzir veličinu stoga za pozive funkcija. Inače, prostorna složenost ovih tehnika je Oh) , gdje 'h' je visina stabla.

Implementacija obilaska stabla

Pogledajmo sada implementaciju gore spomenutih tehnika korištenjem različitih programskih jezika.

Program: Napišite program za implementaciju tehnika obilaska stabla u C-u.

 #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 preorder*/ void traversePreorder(struct node* root) { if (root == NULL) return; printf(' %d ', root->element); traversePreorder(root->left); traversePreorder(root->right); } /*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); } /*function to traverse the nodes of binary tree in postorder*/ void traversePostorder(struct node* root) { if (root == NULL) return; traversePostorder(root->left); traversePostorder(root->right); printf(' %d ', root->element); } int main() { struct node* root = createNode(36); root->left = createNode(26); root->right = createNode(46); root->left->left = createNode(21); root->left->right = createNode(31); root->left->left->left = createNode(11); root->left->left->right = createNode(24); root->right->left = createNode(41); root->right->right = createNode(56); root->right->right->left = createNode(51); root->right->right->right = createNode(66); printf('
 The Preorder traversal of given binary tree is -
'); traversePreorder(root); printf('
 The Inorder traversal of given binary tree is -
'); traverseInorder(root); printf('
 The Postorder traversal of given binary tree is -
'); traversePostorder(root); return 0; } 

Izlaz

Obilazak stabla

Program: Napišite program za implementaciju tehnika obilaska stabla u C#.

 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 traversePreorder(Node node) { if (node == null) return; Console.Write(node.value + ' '); traversePreorder(node.left); traversePreorder(node.right); } void traverseInorder(Node node) { if (node == null) return; traverseInorder(node.left); Console.Write(node.value + ' '); traverseInorder(node.right); } void traversePostorder(Node node) { if (node == null) return; traversePostorder(node.left); traversePostorder(node.right); Console.Write(node.value + ' '); } void traversePreorder() { traversePreorder(root); } void traverseInorder() { traverseInorder(root); } void traversePostorder() { traversePostorder(root); } static void Main() { BinaryTree bt = new BinaryTree(); bt.root = new Node(37); bt.root.left = new Node(27); bt.root.right = new Node(47); bt.root.left.left = new Node(22); bt.root.left.right = new Node(32); bt.root.left.left.left = new Node(12); bt.root.left.left.right = new Node(25); bt.root.right.left = new Node(42); bt.root.right.right = new Node(57); bt.root.right.right.left = new Node(52); bt.root.right.right.right = new Node(67); Console.WriteLine('The Preorder traversal of given binary tree is - '); bt.traversePreorder(); Console.WriteLine(); Console.WriteLine('The Inorder traversal of given binary tree is - '); bt.traverseInorder(); Console.WriteLine(); Console.WriteLine('The Postorder traversal of given binary tree is - '); bt.traversePostorder(); } } 

Izlaz

Obilazak stabla

Program: Napišite program za implementaciju tehnika obilaska stabla u 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 preorder*/ void traversePreorder(struct node* root) { if (root == NULL) return; cout&lt;<' '<element<left); traversepreorder(root->right); } /*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); } *function to traverse the nodes of binary tree in postorder* void traversepostorder(struct node* root) { if (root="=" null) return; traversepostorder(root->left); traversePostorder(root-&gt;right); cout&lt;<' '<element<left="createNode(28);" root->right = createNode(48); root-&gt;left-&gt;left = createNode(23); root-&gt;left-&gt;right = createNode(33); root-&gt;left-&gt;left-&gt;left = createNode(13); root-&gt;left-&gt;left-&gt;right = createNode(26); root-&gt;right-&gt;left = createNode(43); root-&gt;right-&gt;right = createNode(58); root-&gt;right-&gt;right-&gt;left = createNode(53); root-&gt;right-&gt;right-&gt;right = createNode(68); cout&lt;<'
 the preorder traversal of given binary tree is -
'; traversepreorder(root); cout<<'
 inorder traverseinorder(root); postorder traversepostorder(root); return 0; } < pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/17/tree-traversal-inorder-6.webp" alt="Tree Traversal"> <p> <strong>Program:</strong> Write a program to implement tree traversal techniques in Java.</p> <pre> class Node { public int value; public Node left, right; public Node(int element) { value = element; left = right = null; } } class Tree { Node root; /* root of the tree */ Tree() { root = null; } /*function to print the nodes of given binary in Preorder*/ void traversePreorder(Node node) { if (node == null) return; System.out.print(node.value + &apos; &apos;); traversePreorder(node.left); traversePreorder(node.right); } /*function to print the nodes of given binary in Inorder*/ void traverseInorder(Node node) { if (node == null) return; traverseInorder(node.left); System.out.print(node.value + &apos; &apos;); traverseInorder(node.right); } /*function to print the nodes of given binary in Postorder*/ void traversePostorder(Node node) { if (node == null) return; traversePostorder(node.left); traversePostorder(node.right); System.out.print(node.value + &apos; &apos;); } void traversePreorder() { traversePreorder(root); } void traverseInorder() { traverseInorder(root); } void traversePostorder() { traversePostorder(root); } public static void main(String args[]) { Tree pt = new Tree(); pt.root = new Node(36); pt.root.left = new Node(26); pt.root.right = new Node(46); pt.root.left.left = new Node(21); pt.root.left.right = new Node(31); pt.root.left.left.left = new Node(11); pt.root.left.left.right = new Node(24); pt.root.right.left = new Node(41); pt.root.right.right = new Node(56); pt.root.right.right.left = new Node(51); pt.root.right.right.right = new Node(66); System.out.println(); System.out.println(&apos;The Preorder traversal of given binary tree is - &apos;); pt.traversePreorder(); System.out.println(&apos;
&apos;); System.out.println(&apos;The Inorder traversal of given binary tree is - &apos;); pt.traverseInorder(); System.out.println(&apos;
&apos;); System.out.println(&apos;The Postorder traversal of given binary tree is - &apos;); pt.traversePostorder(); System.out.println(); } } </pre> <p> <strong>Output</strong> </p> <p>After the execution of the above code, the output will be -</p> <img src="//techcodeview.com/img/ds-tutorial/17/tree-traversal-inorder-7.webp" alt="Tree Traversal"> <h2>Conclusion</h2> <p>In this article, we have discussed the different types of tree traversal techniques: preorder traversal, inorder traversal, and postorder traversal. We have seen these techniques along with algorithm, example, complexity, and implementation in C, C++, C#, and java.</p> <p>So, that&apos;s all about the article. Hope it will be helpful and informative to you.</p> <hr></'
></'></'></'>

Izlaz

broj u string java

Nakon izvršenja gornjeg koda, izlaz će biti -

Obilazak stabla

Zaključak

U ovom smo članku raspravljali o različitim vrstama tehnika obilaska stabla: obilasku prije reda, obilasku po redoslijedu i obilasku nakon reda. Vidjeli smo ove tehnike zajedno s algoritmom, primjerom, složenošću i implementacijom u C, C++, C# i Javi.

Dakle, to je sve o članku. Nadamo se da će vam biti od pomoći i informacija.