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.
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.
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.
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
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
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->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; cout<<' '<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->left); cout<<' '<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->right); cout<<' '<element<left="createNode(28);" root->right = createNode(48); root->left->left = createNode(23); root->left->right = createNode(33); root->left->left->left = createNode(13); root->left->left->right = createNode(26); root->right->left = createNode(43); root->right->right = createNode(58); root->right->right->left = createNode(53); root->right->right->right = createNode(68); cout<<' 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 + ' '); 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 + ' '); 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 + ' '); } 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('The Preorder traversal of given binary tree is - '); pt.traversePreorder(); System.out.println(' '); System.out.println('The Inorder traversal of given binary tree is - '); pt.traverseInorder(); System.out.println(' '); System.out.println('The Postorder traversal of given binary tree is - '); 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'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 -
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.
' >'>'>'>