# Level with maximum number of nodes using DFS in a N-ary tree

Given a **N-ary** tree, the task is to print the level with the maximum number of nodes.

**Examples:**

Input :For example, consider the following tree 1 - Level 1 / \ 2 3 - Level 2 / \ \ 4 5 6 - Level 3 / \ / 7 8 9 - Level 4Output :Level-3 and Level-4

**Approach:**

- Insert all the connecting nodes to a 2-D vector tree.
- Run a DFS on the tree such that height[node] = 1 + height[parent]
- Once DFS traversal is completed, increase the
*count[]*array by 1, for every node’s level. - Iterate from
**first**level to**last**level, and find the level with the maximum number of nodes. - Re-traverse from first to last level, and print all the levels which have the same number of maximum nodes.

Below is the implementation of the above approach.

## C++

`// C++ program to print the level ` `// with maximum number of nodes ` ` ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Function for DFS in a tree ` `void` `dfs(` `int` `node, ` `int` `parent, ` `int` `height[], ` `int` `vis[], ` ` ` `vector<` `int` `> tree[]) ` `{ ` ` ` `// calculate the level of every node ` ` ` `height[node] = 1 + height[parent]; ` ` ` ` ` `// mark every node as visited ` ` ` `vis[node] = 1; ` ` ` ` ` `// iterate in the subtree ` ` ` `for` `(` `auto` `it : tree[node]) { ` ` ` ` ` `// if the node is not visited ` ` ` `if` `(!vis[it]) { ` ` ` ` ` `// call the dfs function ` ` ` `dfs(it, node, height, vis, tree); ` ` ` `} ` ` ` `} ` `} ` ` ` `// Function to insert edges ` `void` `insertEdges(` `int` `x, ` `int` `y, vector<` `int` `> tree[]) ` `{ ` ` ` `tree[x].push_back(y); ` ` ` `tree[y].push_back(x); ` `} ` ` ` `// Function to print all levels ` `void` `printLevelswithMaximumNodes(` `int` `N, ` `int` `vis[], ` `int` `height[]) ` `{ ` ` ` `int` `mark[N + 1]; ` ` ` `memset` `(mark, 0, ` `sizeof` `mark); ` ` ` ` ` `int` `maxLevel = 0; ` ` ` `for` `(` `int` `i = 1; i <= N; i++) { ` ` ` ` ` `// count number of nodes ` ` ` `// in every level ` ` ` `if` `(vis[i]) ` ` ` `mark[height[i]]++; ` ` ` ` ` `// find the maximum height of tree ` ` ` `maxLevel = max(height[i], maxLevel); ` ` ` `} ` ` ` ` ` `int` `maxi = 0; ` ` ` ` ` `for` `(` `int` `i = 1; i <= maxLevel; i++) { ` ` ` `maxi = max(mark[i], maxi); ` ` ` `} ` ` ` ` ` `// print even number of nodes ` ` ` `cout << ` `"The levels with maximum number of nodes are: "` `; ` ` ` `for` `(` `int` `i = 1; i <= maxLevel; i++) { ` ` ` `if` `(mark[i] == maxi) ` ` ` `cout << i << ` `" "` `; ` ` ` `} ` `} ` ` ` `// Driver Code ` `int` `main() ` `{ ` ` ` `// Construct the tree ` ` ` ` ` `/* 1 ` ` ` `/ \ ` ` ` `2 3 ` ` ` `/ \ \ ` ` ` `4 5 6 ` ` ` `/ \ / ` ` ` `7 8 9 */` ` ` ` ` `const` `int` `N = 9; ` ` ` ` ` `vector<` `int` `> tree[N + 1]; ` ` ` ` ` `insertEdges(1, 2, tree); ` ` ` `insertEdges(1, 3, tree); ` ` ` `insertEdges(2, 4, tree); ` ` ` `insertEdges(2, 5, tree); ` ` ` `insertEdges(5, 7, tree); ` ` ` `insertEdges(5, 8, tree); ` ` ` `insertEdges(3, 6, tree); ` ` ` `insertEdges(6, 9, tree); ` ` ` ` ` `int` `height[N + 1]; ` ` ` `int` `vis[N + 1] = { 0 }; ` ` ` ` ` `height[0] = 0; ` ` ` ` ` `// call the dfs function ` ` ` `dfs(1, 0, height, vis, tree); ` ` ` ` ` `// Function to print ` ` ` `printLevelswithMaximumNodes(N, vis, height); ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Python3

# Python3 program to print the level

# with the maximum number of nodes

# Function for DFS in a tree

def dfs(node, parent, height, vis, tree):

# calculate the level of every node

height[node] = 1 + height[parent]

# mark every node as visited

vis[node] = 1

# iterate in the subtree

for it in tree[node]:

# if the node is not visited

if vis[it] == 0:

# call the dfs function

dfs(it, node, height, vis, tree)

# Function to insert edges

def insertEdges(x, y, tree):

tree[x].append(y)

tree[y].append(x)

# Function to print all levels

def printLevelswithMaximumNodes(N, vis, height):

mark = [0] * (N + 1)

maxLevel = 0

for i in range (1, N + 1):

# count number of nodes

# in every level

if vis[i] == 1:

mark[height[i]] += 1

# find the maximum height of tree

maxLevel = max(height[i], maxLevel)

maxi = 0

for i in range(1, maxLevel + 1):

maxi = max(mark[i], maxi)

# print even number of nodes

print(“The levels with maximum number”,

“of nodes are:”, end = ” “)

for i in range(1, maxLevel + 1):

if mark[i] == maxi:

print(i, end = ” “)

# Driver Code

if __name__ == “__main__”:

# Construct the tree

N = 9

# Create an empty 2-D list

tree = [[] for i in range(N + 1)]

insertEdges(1, 2, tree)

insertEdges(1, 3, tree)

insertEdges(2, 4, tree)

insertEdges(2, 5, tree)

insertEdges(5, 7, tree)

insertEdges(5, 8, tree)

insertEdges(3, 6, tree)

insertEdges(6, 9, tree)

height = [None] * (N + 1)

vis = [0] * (N + 1)

height[0] = 0

# call the dfs function

dfs(1, 0, height, vis, tree)

# Function to print

printLevelswithMaximumNodes(N, vis, height)

# This code is contributed

# by Rituraj Jain

**Output:**

The levels with maximum number of nodes are: 3 4

**Time Complexity**: O(N)

**Auxiliary Space**: O(N)

## Recommended Posts:

- Queries to find the maximum Xor value between X and the nodes of a given level of a perfect binary tree
- Level with maximum number of nodes
- Count the number of nodes at a given level in a tree using DFS
- Count the number of nodes at given level in a tree using BFS.
- Difference between sums of odd level and even level nodes of a Binary Tree
- Swap Nodes in Binary tree of every k'th level
- Sum of nodes at k-th level in a tree represented as string
- Count nodes with two children at level L in a Binary Tree
- Product of nodes at k-th level in a tree represented as string
- Print nodes between two given level numbers of a binary tree
- Print all the nodes except the leftmost node in every level of the given binary tree
- Print extreme nodes of each level of Binary Tree in alternate order
- Print even positioned nodes of even levels in level order of the given binary tree
- Recursive Program to Print extreme nodes of each level of Binary Tree in alternate order
- Find maximum level sum in Binary Tree

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.