# 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 given level in a tree using BFS.
- Count the number of nodes at a given level in a tree using DFS
- 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
- Print nodes between two given level numbers of a binary tree
- Product of nodes at k-th level in a tree represented as string
- Print all the nodes except the leftmost node in every level of the given binary tree
- Print even positioned nodes of even levels in level order of the given binary tree
- Print odd positioned nodes of even levels in level order of the given binary tree
- Print odd positioned nodes of odd levels in level order of the given binary tree
- Print even positioned nodes of odd levels in level order of the given 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.