Tässä artikkelissa käsittelemme ennakkotilauksen läpikulkua tietorakenteessa. Lineaarisilla tietorakenteilla, kuten pino, taulukko, jono jne., on vain yksi tapa kulkea datan läpi. Mutta hierarkkisessa tietorakenteessa, kuten esim puu , on olemassa useita tapoja kulkea dataa läpi.
Ennakkotilauksen läpikäymisessä käydään ensin juurisolmussa, sitten vasemmassa alipuussa ja tämän jälkeen oikeanpuoleisessa alipuussa. Ennakkotilauksen läpikulkuprosessi voidaan esittää seuraavasti:
root → left → right
Juurisolmu kuljetetaan aina ensin ennakkotilauksen läpikäymisessä, kun taas se on jälkikäteen viimeinen kohde. Ennakkotilauksen läpikulkua käytetään puun etuliitelausekkeen saamiseksi.
Ennakkotilauksen läpikäymisen vaiheet on lueteltu seuraavasti -
äärellisen tilan kone
- Vieraile ensin juurisolmussa.
- Käy sitten vasemmassa alipuussa.
- Lopuksi vieraile oikealla alipuulla.
Ennakkotilauksen läpikulkutekniikka seuraa Juuri Vasen Oikea käytäntö. Nimien ennakkotilaus itsessään viittaa siihen, että juurisolmu käydään ensin läpi.
Algoritmi
Katsotaanpa nyt ennakkotilauksen läpikäymisen algoritmia.
Step 1: Repeat Steps 2 to 4 while TREE != NULL Step 2: Write TREE -> DATA Step 3: PREORDER(TREE -> LEFT) Step 4: PREORDER(TREE -> RIGHT) [END OF LOOP] Step 5: END
Esimerkki ennakkotilauksesta
Katsotaanpa nyt esimerkkiä ennakkotilauksen läpikäymisestä. On helpompi ymmärtää ennakkotilauksen läpikulkuprosessi esimerkin avulla.
Keltaisilla solmuilla ei ole vielä käyty. Nyt kuljemme yllä olevan puun solmut käyttämällä ennakkotilauksen läpikulkua.
- Aloita juurisolmusta 40. Ensin, tulostaa 40 ja sitten rekursiivisesti vasemman alipuun poikki.
- Siirry nyt vasempaan alipuuhun. Vasemman alipuun juurisolmu on 30. Tulosta 30 , ja siirry kohti 30:n vasenta alipuuta.
- Vasemmassa alipuussa 30 on elementti 25, joten tulostaa 25 , ja kulkea 25:n vasemman alipuun läpi.
- Vasemmassa alipuussa 25 on elementti 15 ja 15:llä ei ole alipuuta. Niin, tulostaa 15 , ja siirry 25:n oikeaan alipuuhun.
- Oikeassa alipuussa 25 on 28, ja 28:lla ei ole alipuuta. Niin, tulostaa 28 , ja siirry 30:n oikeaan alipuuhun.
- Oikeassa alipuussa 30 on 35, jolla ei ole alipuuta. Niin tulostaa 35 , ja kulkea 40:n oikean alipuun läpi.
- Oikeassa alipuussa 40 on 50. Tulosta 50 , ja kulkea 50:n vasemman alipuun läpi.
- Vasemmassa 50 alipuussa on 45, joilla ei ole lapsia. Niin, tulostaa 45 , ja kulkea 50:n oikean alipuun läpi.
- Oikeassa 50:n alipuussa on 60. Tulosta 60 ja kulkea 60:n vasemman alipuun läpi.
- Vasemmassa alipuussa 60 on 55, jolla ei ole lapsia. Niin, tulostaa 55 ja siirry 60:n oikeaan alipuuhun.
- Oikeassa alipuussa 60 on 70, joilla ei ole lapsia. Niin, tulostaa 70 ja lopeta prosessi.
Kun ennakkotilauksen läpikulku on suoritettu, lopullinen tulos on -
40, 30, 25, 15, 28, 35, 50, 45, 60, 55, 70
java merkkijonomenetelmät
Ennakkotilauksen läpikulun monimutkaisuus
Ennakkotilauksen läpikulun aika monimutkaisuus on Päällä) , jossa 'n' on binääripuun koko.
Sitä vastoin ennakkotilauksen läpikulun monimutkaisuus on O(1) , jos emme ota huomioon funktiokutsujen pinon kokoa. Muuten ennakkotilauksen läpikulku on monimutkainen Vai niin) , jossa 'h' on puun korkeus.
Ennakkotilauksen läpikulun toteutus
Katsotaanpa nyt ennakkotilauksen läpikulkua eri ohjelmointikielillä.
Ohjelmoida: Kirjoita ohjelma toteuttamaan ennakkotilauksen läpikulku C-kielellä.
cout
#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); } 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 Preorder traversal of given binary tree is - '); traversePreorder(root); return 0; }
Lähtö
Yllä olevan koodin suorittamisen jälkeen tulos on -
Ohjelmoida: Kirjoita ohjelma toteuttamaan ennakkotilauksen läpikulku C++:ssa.
#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); } int main() { struct node* root = createNode(39); root->left = createNode(29); root->right = createNode(49); root->left->left = createNode(24); root->left->right = createNode(34); root->left->left->left = createNode(14); root->left->left->right = createNode(27); root->right->left = createNode(44); root->right->right = createNode(59); root->right->right->left = createNode(54); root->right->right->right = createNode(69); cout<<' the preorder traversal of given binary tree is - '; traversepreorder(root); return 0; } < 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/25/preorder-traversal-14.webp" alt="Preorder Traversal"> <p> <strong>Program:</strong> Write a program to implement preorder 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 traversePreorder(Node node) { if (node == null) return; Console.Write(node.value + ' '); traversePreorder(node.left); traversePreorder(node.right); } void traversePreorder() { traversePreorder(root); } static void Main() { BinaryTree bt = new BinaryTree(); bt.root = new Node(38); bt.root.left = new Node(28); bt.root.right = new Node(48); bt.root.left.left = new Node(23); bt.root.left.right = new Node(33); bt.root.left.left.left = new Node(13); bt.root.left.left.right = new Node(26); bt.root.right.left = new Node(43); bt.root.right.right = new Node(58); bt.root.right.right.left = new Node(53); bt.root.right.right.right = new Node(68); Console.WriteLine('Preorder traversal of given binary tree is - '); bt.traversePreorder(); } } </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/25/preorder-traversal-15.webp" alt="Preorder Traversal"> <p> <strong>Program:</strong> Write a program to implement preorder traversal in Java.</p> <pre> class Node { public int value; public Node left, right; public Node(int element) { value = element; left = right = null; } } class PreorderTraversal { Node root; PreorderTraversal() { root = null; } void traversePreorder(Node node) { if (node == null) return; System.out.print(node.value + ' '); traversePreorder(node.left); traversePreorder(node.right); } void traversePreorder() { traversePreorder(root); } public static void main(String args[]) { PreorderTraversal pt = new PreorderTraversal(); pt.root = new Node(37); pt.root.left = new Node(27); pt.root.right = new Node(47); pt.root.left.left = new Node(22); pt.root.left.right = new Node(32); pt.root.left.left.left = new Node(12); pt.root.left.left.right = new Node(25); pt.root.right.left = new Node(42); pt.root.right.right = new Node(57); pt.root.right.right.left = new Node(52); pt.root.right.right.right = new Node(67); System.out.println(); System.out.println('Preorder traversal of given binary tree is - '); pt.traversePreorder(); 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/25/preorder-traversal-16.webp" alt="Preorder Traversal"> <p>So, that's all about the article. Hope the article will be helpful and informative to you.</p> <hr></' ></'>
Lähtö
Yllä olevan koodin suorittamisen jälkeen tulos on -
Ohjelmoida: Kirjoita ohjelma toteuttamaan ennakkotilauksen läpikulku Javassa.
milloin q2 alkaa
class Node { public int value; public Node left, right; public Node(int element) { value = element; left = right = null; } } class PreorderTraversal { Node root; PreorderTraversal() { root = null; } void traversePreorder(Node node) { if (node == null) return; System.out.print(node.value + ' '); traversePreorder(node.left); traversePreorder(node.right); } void traversePreorder() { traversePreorder(root); } public static void main(String args[]) { PreorderTraversal pt = new PreorderTraversal(); pt.root = new Node(37); pt.root.left = new Node(27); pt.root.right = new Node(47); pt.root.left.left = new Node(22); pt.root.left.right = new Node(32); pt.root.left.left.left = new Node(12); pt.root.left.left.right = new Node(25); pt.root.right.left = new Node(42); pt.root.right.right = new Node(57); pt.root.right.right.left = new Node(52); pt.root.right.right.right = new Node(67); System.out.println(); System.out.println('Preorder traversal of given binary tree is - '); pt.traversePreorder(); System.out.println(); } }
Lähtö
Yllä olevan koodin suorittamisen jälkeen tulos on -
Eli siinä kaikki artikkelista. Toivottavasti artikkeli on hyödyllinen ja informatiivinen sinulle.
' >'>