Mirror of n-ary Tree

28 Jun, 2022
Given a Tree where every node contains variable number of children, convert the tree to its mirror. Below diagram shows an example. 
We strongly recommend you to minimize your browser and try this yourself first. Node of tree is represented as a key and a variable sized array of children pointers. The idea is similar to mirror of Binary Tree. For every node, we first recur for all of its children and then reverse array of children pointers. We can also do these steps in other way, i.e., reverse array of children pointers first and then recur for children.
Below is C++ implementation of above idea. 
C++
Python3
Javascript
// C++ program to mirror an n-ary tree#include <bits/stdc++.h>using namespace std; // Represents a node of an n-ary treestruct Node{    int key;    vector<Node *>child;}; // Function to convert a tree to its mirrorvoid mirrorTree(Node * root){    // Base case: Nothing to do if root is NULL    if (root==NULL)        return;     // Number of children of root    int n = root->child.size();     // If number of child is less than 2 i.e.    // 0 or 1 we do not need to do anything    if (n < 2)        return;     // Calling mirror function for each child    for (int i=0; i<n; i++)        mirrorTree(root->child[i]);     // Reverse vector (variable sized array) of child    // pointers    reverse(root->child.begin(), root->child.end());} // Utility function to create a new tree nodeNode *newNode(int key){    Node *temp = new Node;    temp->key = key;    return temp;} // Prints the n-ary tree level wisevoid printNodeLevelWise(Node * root){    if (root==NULL)        return;     // Create a queue and enqueue root to it    queue<Node *>q;    q.push(root);     // Do level order traversal. Two loops are used    // to make sure that different levels are printed    // in different lines    while (!q.empty())    {        int n = q.size();        while (n>0)        {            // Dequeue an item from queue and print it            Node * p = q.front();            q.pop();            cout << p->key << " ";             // Enqueue all childrent of the dequeued item            for (int i=0; i<p->child.size(); i++)                q.push(p->child[i]);            n--;        }         cout << endl; // Separator between levels    }} // Driver programint main(){    /*   Let us create below tree    *              10    *        /   /    \   \    *        2  34    56   100    *                 |   /  | \    *                 1   7  8  9    */    Node *root = newNode(10);    (root->child).push_back(newNode(2));    (root->child).push_back(newNode(34));    (root->child).push_back(newNode(56));    (root->child).push_back(newNode(100));    (root->child[2]->child).push_back(newNode(1));    (root->child[3]->child).push_back(newNode(7));    (root->child[3]->child).push_back(newNode(8));    (root->child[3]->child).push_back(newNode(9));     cout << "Level order traversal Before Mirroring\n";    printNodeLevelWise(root);     mirrorTree(root);     cout << "\nLevel order traversal After Mirroring\n";    printNodeLevelWise(root);     return 0;}
# Python program to mirror an n-ary tree # Represents a node of an n-ary treeclass Node :     # Utility function to create a new tree node    def __init__(self ,key):        self.key = key        self.child = []  # Function to convert a tree to its mirrordef mirrorTree(root):         # Base Case : nothing to do if root is None    if root is None:        return         # Number of children of root    n = len(root.child)     # If number of child is less than 2 i.e.    # 0 or 1 we don't need to do anything    if n <2 :        return         # Calling mirror function for each child    for i in range(n):        mirrorTree(root.child[i]);         # Reverse variable sized array of child pointers    root.child.reverse()      # Prints the n-ary tree level wise def printNodeLevelWise(root):    if root is None:        return         # create a queue and enqueue root to it    queue = []    queue.append(root)     # Do level order traversal. Two loops are used    # to make sure that different levels are printed    # in different lines    while(len(queue) >0):         n = len(queue)        while(n > 0) :             # Dequeue an item from queue and print it            p = queue[0]            queue.pop(0)            print(p.key,end=" ")                 # Enqueue all children of the dequeued item            for index, value in enumerate(p.child):                queue.append(value)             n -= 1        print() # Separator between levels          # Driver Program     """   Let us create below tree    *              10    *        /   /    \   \    *        2  34    56   100    *                 |   /  | \    *                 1   7  8  9    """ root = Node(10)root.child.append(Node(2))root.child.append(Node(34))root.child.append(Node(56))root.child.append(Node(100))root.child[2].child.append(Node(1))root.child[3].child.append(Node(7))root.child[3].child.append(Node(8))root.child[3].child.append(Node(9)) print ("Level order traversal Before Mirroring")printNodeLevelWise(root) mirrorTree(root)     print ("\nLevel Order traversal After Mirroring")printNodeLevelWise(root)
<script>  // Javascript program to mirror an n-ary tree // Represents a node of an n-ary treeclass Node{  constructor()  {    this.key = 0;    this.child = []  }}; // Function to convert a tree to its mirrorfunction mirrorTree(root){    // Base case: Nothing to do if root is null    if (root==null)        return;     // Number of children of root    var n = root.child.length;     // If number of child is less than 2 i.e.    // 0 or 1 we do not need to do anything    if (n < 2)        return;     // Calling mirror function for each child    for(var i=0; i<n; i++)        mirrorTree(root.child[i]);     // Reverse vector (variable sized array) of child    // pointers    root.child.reverse();} // Utility function to create a new tree nodefunction newNode(key){    var temp = new Node;    temp.key = key;    return temp;} // Prints the n-ary tree level wisefunction printNodeLevelWise(root){    if (root==null)        return;     // Create a queue and enqueue root to it    var q = [];    q.push(root);     // Do level order traversal. Two loops are used    // to make sure that different levels are printed    // in different lines    while (q.length!=0)    {        var n = q.length;        while (n>0)        {            // Dequeue an item from queue and print it            var p = q[0];            q.shift();            document.write( p.key + " ");             // Enqueue all childrent of the dequeued item            for(var i=0; i<p.child.length; i++)                q.push(p.child[i]);            n--;        }         document.write("<br>") // Separator between levels    }} // Driver program/*   Let us create below tree*              10*        /   /    \   \*        2  34    56   100*                 |   /  | \*                 1   7  8  9*/var root = newNode(10);(root.child).push(newNode(2));(root.child).push(newNode(34));(root.child).push(newNode(56));(root.child).push(newNode(100));(root.child[2].child).push(newNode(1));(root.child[3].child).push(newNode(7));(root.child[3].child).push(newNode(8));(root.child[3].child).push(newNode(9));document.write("Level order traversal Before Mirroring<br>");printNodeLevelWise(root);mirrorTree(root);document.write("<br>Level order traversal After Mirroring<br>");printNodeLevelWise(root); // This code is contributed by rrrtnx.</script>
Level order traversal Before Mirroring
10 
2 34 56 100 
1 7 8 9 

Level order traversal After Mirroring
10 
100 56 34 2 
9 8 7 1 

Mirror of n-ary Tree | GeeksforGeeks - YouTubeGeeksforGeeks530K subscribersMirror of n-ary Tree | GeeksforGeeksWatch laterShareCopy linkInfoShoppingTap to unmuteIf playback doesn't begin shortly, try restarting your device.You're signed outVideos you watch may be added to the TV's watch history and influence TV recommendations. To avoid this, cancel and sign in to YouTube on your computer.CancelConfirmMore videosMore videosSwitch cameraShareInclude playlistAn error occurred while retrieving sharing information. Please try again later.Watch on0:000:000:00 / 4:20•Live•<div class="player-unavailable"><h1 class="message">An error occurred.</h1><div class="submessage"><a href="https://www.youtube.com/watch?v=NGHaYEq2EFM" target="_blank">Try watching this video on www.youtube.com</a>, or enable JavaScript if it is disabled in your browser.</div></div>
rrrtnx
anikakapoor
amartyaghoshgfg
hardikkoriintern
n-ary-tree
Tree
Tree
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Tree Traversals (Inorder, Preorder and Postorder)
Binary Tree | Set 1 (Introduction)
Level Order Binary Tree Traversal
AVL Tree | Set 1 (Insertion)
Introduction to Data Structures
Introduction to Tree Data Structure
Inorder Tree Traversal without Recursion
What is Data Structure: Types, Classifications and Applications
Write a Program to Find the Maximum Depth or Height of a Tree
Binary Tree | Set 3 (Types of Binary Tree)