Inorder traversal of an N-ary Tree

12 Oct, 2021
Given an N-ary tree containing, the task is to print the inorder traversal of the tree.
Examples: 
Input: N = 3  
Output: 5 6 2 7 3 1 4Input: N = 3  
Output: 2 5 3 1 4 6 
Approach: The inorder traversal of an N-ary tree is defined as visiting all the children except the last then the root and finally the last child recursively. 
Recursively visit the first child.
Recursively visit the second child.
.....
Recursively visit the second last child.
Print the data in the node.
Recursively visit the last child.
Repeat the above steps till all the nodes are visited.
Below is the implementation of the above approach:  
C++
Java
Python3
C#
Javascript
// C++ implementation of the approach#include<bits/stdc++.h>using namespace std; // Class for the node of the treestruct Node{    int data;     // List of children    struct Node **children;         int length;         Node()    {        length = 0;        data = 0;    }     Node(int n, int data_)    {        children = new Node*();        length = n;        data = data_;    }}; // Function to print the inorder traversal// of the n-ary treevoid inorder(Node *node){    if (node == NULL)        return;     // Total children count    int total = node->length;         // All the children except the last    for (int i = 0; i < total - 1; i++)        inorder(node->children[i]);     // Print the current node's data    cout<< node->data << " ";     // Last child    inorder(node->children[total - 1]);} // Driver codeint main(){     /* Create the following tree          1        / | \        2 3 4        / | \        5 6 7    */    int n = 3;    Node* root = new Node(n, 1);    root->children[0] = new Node(n, 2);    root->children[1] = new Node(n, 3);    root->children[2] = new Node(n, 4);    root->children[0]->children[0] = new Node(n, 5);    root->children[0]->children[1] = new Node(n, 6);    root->children[0]->children[2] = new Node(n, 7);     inorder(root);    return 0;} // This code is Contributed by Arnab Kundu
// Java implementation of the approachclass GFG {     // Class for the node of the tree    static class Node {        int data;         // List of children        Node children[];         Node(int n, int data)        {            children = new Node[n];            this.data = data;        }    }     // Function to print the inorder traversal    // of the n-ary tree    static void inorder(Node node)    {        if (node == null)            return;         // Total children count        int total = node.children.length;        // All the children except the last        for (int i = 0; i < total - 1; i++)            inorder(node.children[i]);         // Print the current node's data        System.out.print("" + node.data + " ");         // Last child        inorder(node.children[total - 1]);    }     // Driver code    public static void main(String[] args)    {         /* Create the following tree                   1                /  |  \               2   3   4             / | \            5  6  7        */        int n = 3;        Node root = new Node(n, 1);        root.children[0] = new Node(n, 2);        root.children[1] = new Node(n, 3);        root.children[2] = new Node(n, 4);        root.children[0].children[0] = new Node(n, 5);        root.children[0].children[1] = new Node(n, 6);        root.children[0].children[2] = new Node(n, 7);         inorder(root);    }}
# Python3 implementation of the approachclass GFG:         # Class for the node of the tree    class Node:        def __init__(self,n,data):            # List of children            self.children = [None]*n            self.data = data         # Function to print the inorder traversal    # of the n-ary tree    def inorder(self, node):        if node == None:            return                 # Total children count        total = len(node.children)                 # All the children except the last        for i in range(total-1):            self.inorder(node.children[i])                 # Print the current node's data        print(node.data,end=" ")                 # Last child        self.inorder(node.children[total-1])         # Driver code    def main(self):        # Create the following tree         #          1        #       /  |  \        #      2   3   4        #    / | \        #   5  6  7                 n = 3        root = self.Node(n, 1)        root.children[0] = self.Node(n, 2)        root.children[1] = self.Node(n, 3)        root.children[2] = self.Node(n, 4)        root.children[0].children[0] = self.Node(n, 5)        root.children[0].children[1] = self.Node(n, 6)        root.children[0].children[2] = self.Node(n, 7)                 self.inorder(root)         ob = GFG() # Create class objectob.main() # Call main function # This code is contributed by Shivam Singh
// C# implementation of the approachusing System; class GFG{     // Class for the node of the tree    public class Node    {        public int data;         // List of children        public Node []children;         public Node(int n, int data)        {            children = new Node[n];            this.data = data;        }    }     // Function to print the inorder traversal    // of the n-ary tree    static void inorder(Node node)    {        if (node == null)            return;         // Total children count        int total = node.children.Length;                 // All the children except the last        for (int i = 0; i < total - 1; i++)            inorder(node.children[i]);         // Print the current node's data        Console.Write("" + node.data + " ");         // Last child        inorder(node.children[total - 1]);    }     // Driver code    public static void Main()    {         /* Create the following tree                1                / | \            2 3 4            / | \            5 6 7        */        int n = 3;        Node root = new Node(n, 1);        root.children[0] = new Node(n, 2);        root.children[1] = new Node(n, 3);        root.children[2] = new Node(n, 4);        root.children[0].children[0] = new Node(n, 5);        root.children[0].children[1] = new Node(n, 6);        root.children[0].children[2] = new Node(n, 7);         inorder(root);    }} // This code is contributed by AnkitRai01
<script>  // JavaScript implementation of the approach// Class for the node of the treeclass Node{     constructor(n, data)    {        this.data = data;        this.children = Array(n);    }}// Function to print the inorder traversal// of the n-ary treefunction inorder(node){    if (node == null)        return;    // Total children count    var total = node.children.length;         // All the children except the last    for (var i = 0; i < total - 1; i++)        inorder(node.children[i]);    // Print the current node's data    document.write("" + node.data + " ");    // Last child    inorder(node.children[total - 1]);} // Driver code/* Create the following tree        1        / | \    2 3 4    / | \    5 6 7*/var n = 3;var root = new Node(n, 1);root.children[0] = new Node(n, 2);root.children[1] = new Node(n, 3);root.children[2] = new Node(n, 4);root.children[0].children[0] = new Node(n, 5);root.children[0].children[1] = new Node(n, 6);root.children[0].children[2] = new Node(n, 7);inorder(root); </script>
5 6 2 7 3 1 4 
Time Complexity:  O(n)
Space Complexity:  O(n)
ankthon
andrew1234
SHIVAMSINGH67
user_pbdh
itsok
ashutoshsinghgeeksforgeeks
suryadeepartist
Inorder Traversal
n-ary-tree
Data Structures
Tree
Data Structures
Tree
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.