Given a n-ary tree, count number of nodes which have more number of children than parents - GeeksforGeeks

21 May, 2021
Given a N-ary tree represented as adjacency list, we need to write a program to count all such nodes in this tree which has more number of children than its parent.For Example,  
In the above tree, the count will be 1 as there is only one such node which is ‘2’ which has more number of children than its parent. 2 has three children (4, 5 and 6) whereas its parent, 1 has only two children (2 and 3).
 
We can solve this problem using both BFS and DFS algorithms. We will explain here in details about how to solve this problem using BFS algorithm. As the tree is represented using adjacency list representation. So, for any node say ‘u’ the number of children of this node can be given as adj[u].size(). Now the idea is to apply BFS on the given tree and while traversing the children of a node ‘u’ say ‘v’ we will simply check is adj[v].size() > adj[u].size(). Below is the implementation of above idea:  
CPP
Java
Python3
C#
Javascript
// C++ program to count number of nodes// which has more children than its parent #include<bits/stdc++.h>using namespace std; // function to count number of nodes// which has more children than its parentint countNodes(vector<int> adj[], int root){       int count = 0;     // queue for applying BFS    queue<int> q;     // BFS algorithm    q.push(root);         while (!q.empty())    {        int node = q.front();        q.pop();         // traverse children of node        for( int i=0;i<adj[node].size();i++)        {               // children of node            int children = adj[node][i];             // if number of childs of children            // is greater than number of childs            // of node, then increment count            if (adj[children].size() > adj[node].size())                count++;            q.push(children);        }    }     return count;} // Driver program to test above functionsint main(){       // adjacency list for n-ary tree    vector<int> adj[10];     // construct n ary tree as shown    // in above diagram    adj[1].push_back(2);    adj[1].push_back(3);    adj[2].push_back(4);    adj[2].push_back(5);    adj[2].push_back(6);    adj[3].push_back(9);    adj[5].push_back(7);    adj[5].push_back(8);     int root = 1;     cout << countNodes(adj, root);    return 0;}
// Java program to count number of nodes// which has more children than its parentimport java.util.*; class GFG{ // function to count number of nodes// which has more children than its parentstatic int countNodes(Vector<Integer> adj[], int root){    int count = 0;     // queue for applying BFS    Queue<Integer> q = new LinkedList<>();     // BFS algorithm    q.add(root);         while (!q.isEmpty())    {        int node = q.peek();        q.remove();         // traverse children of node        for( int i=0;i<adj[node].size();i++)        {            // children of node            int children = adj[node].get(i);             // if number of childs of children            // is greater than number of childs            // of node, then increment count            if (adj[children].size() > adj[node].size())                count++;            q.add(children);        }    }    return count;} // Driver codepublic static void main(String[] args){    // adjacency list for n-array tree    Vector<Integer> []adj = new Vector[10];    for(int i= 0; i < 10 ; i++) {        adj[i] = new Vector<>();    }         // conn array tree as shown    // in above diagram    adj[1].add(2);    adj[1].add(3);    adj[2].add(4);    adj[2].add(5);    adj[2].add(6);    adj[3].add(9);    adj[5].add(7);    adj[5].add(8);     int root = 1;     System.out.print(countNodes(adj, root));}} // This code is contributed by Rajput-Ji
# Python3 program to count number of nodes# which has more children than its parentfrom collections import deque adj = [[] for i in range(100)] # function to count number of nodes# which has more children than its parentdef countNodes(root):     count = 0     # queue for applying BFS    q = deque()     # BFS algorithm    q.append(root)     while len(q) > 0:         node = q.popleft()         # traverse children of node        for i in adj[node]:            # children of node            children = i             # if number of childs of children            # is greater than number of childs            # of node, then increment count            if (len(adj[children]) > len(adj[node])):                count += 1            q.append(children)     return count  # Driver program to test above functions # construct n ary tree as shown# in above diagramadj[1].append(2)adj[1].append(3)adj[2].append(4)adj[2].append(5)adj[2].append(6)adj[3].append(9)adj[5].append(7)adj[5].append(8) root = 1 print(countNodes(root)) # This code is contributed by mohit kumar 29
// C# program to count number of nodes// which has more children than its parentusing System;using System.Collections.Generic; class GFG{  // function to count number of nodes// which has more children than its parentstatic int countNodes(List<int> []adj, int root){    int count = 0;      // queue for applying BFS    List<int> q = new List<int>();      // BFS algorithm    q.Add(root);          while (q.Count != 0)    {        int node = q[0];        q.RemoveAt(0);          // traverse children of node        for( int i = 0; i < adj[node].Count; i++)        {            // children of node            int children = adj[node][i];              // if number of childs of children            // is greater than number of childs            // of node, then increment count            if (adj[children].Count > adj[node].Count)                count++;            q.Add(children);        }    }    return count;}  // Driver codepublic static void Main(String[] args){    // adjacency list for n-array tree    List<int> []adj = new List<int>[10];    for(int i= 0; i < 10 ; i++) {        adj[i] = new List<int>();    }          // conn array tree as shown    // in above diagram    adj[1].Add(2);    adj[1].Add(3);    adj[2].Add(4);    adj[2].Add(5);    adj[2].Add(6);    adj[3].Add(9);    adj[5].Add(7);    adj[5].Add(8);      int root = 1;      Console.Write(countNodes(adj, root));}} // This code is contributed by PrinciRaj1992
<script>// Javascript program to count number of nodes// which has more children than its parent         // function to count number of nodes// which has more children than its parent    function countNodes(adj,root)    {        let count = 0;       // queue for applying BFS    let q = [];       // BFS algorithm    q.push(root);           while (q.length!=0)    {        let node = q[0];        q.shift();           // traverse children of node        for( let i=0;i<adj[node].length;i++)        {            // children of node            let children = adj[node][i];               // if number of childs of children            // is greater than number of childs            // of node, then increment count            if (adj[children].length > adj[node].length)                count++;            q.push(children);        }    }    return count;    }         // Driver code          // adjacency list for n-array tree    let adj = [];    for(let i= 0; i < 10 ; i++) {        adj[i] = [];    }           // conn array tree as shown    // in above diagram    adj[1].push(2);    adj[1].push(3);    adj[2].push(4);    adj[2].push(5);    adj[2].push(6);    adj[3].push(9);    adj[5].push(7);    adj[5].push(8);       let root = 1;       document.write(countNodes(adj, root));      // This code is contributed by patel2127</script>
Output:  
1
Time Complexity: O( n ) , where n is the number of nodes in the tree. 
YouTubeGeeksforGeeks508K subscribersCount number of nodes having more number of children than parents in 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:42•Live•<div class="player-unavailable"><h1 class="message">An error occurred.</h1><div class="submessage"><a href="https://www.youtube.com/watch?v=7lB1zyIbCN0" target="_blank">Try watching this video on www.youtube.com</a>, or enable JavaScript if it is disabled in your browser.</div></div>
This article is contributed by Harsh Agarwal. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
Akanksha_Rai
mohit kumar 29
Rajput-Ji
princiraj1992
patel2127
n-ary-tree
Tree
Tree
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Binary Tree | Set 3 (Types of Binary Tree)
Binary Tree | Set 2 (Properties)
Decision Tree
A program to check if a binary tree is BST or not
Introduction to Tree Data Structure
Lowest Common Ancestor in a Binary Tree | Set 1
Complexity of different operations in Binary tree, Binary Search Tree and AVL tree
Expression Tree
BFS vs DFS for Binary Tree
Deletion in a Binary Tree