# 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:

- 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
- Sum of nodes at k-th level in a tree represented as string
- Swap Nodes in Binary tree of every k'th level
- 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 extreme nodes of each level of Binary Tree in alternate order
- Find maximum level sum in Binary Tree
- Find the maximum node at a given level in a binary tree
- Find maximum level product in Binary Tree
- Connect Nodes at same Level (Level Order Traversal)
- Find maximum among all right nodes in Binary Tree
- Maximum sum of nodes in Binary tree such that no two are adjacent

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.