# Print levels with odd number of nodes and even number of nodes

Given an **N-ary** tree, print all the levels with odd and even number of nodes in it.

**Examples**:

For example consider the following tree 1 - Level 1 / \ 2 3 - Level 2 / \ \ 4 5 6 - Level 3 / \ / 7 8 9 - Level 4 The levels with odd number of nodes are: 1 3 4 The levels with even number of nodes are: 2

**Note**: The level numbers starts from 1. That is, the root node is at the level 1.

**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 print all nodes with count[] values as odd to get level with odd number nodes.
- Iterate from first level to last level, and print all nodes with count[] values as even to get level with even number nodes.

Below is the implementation of the above approach:

`// C++ program to print all levels ` `// with odd and even 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` `printLevelsOddEven(` `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); ` ` ` `} ` ` ` ` ` `// print odd number of nodes ` ` ` `cout << ` `"The levels with odd number of nodes are: "` `; ` ` ` `for` `(` `int` `i = 1; i <= maxLevel; i++) { ` ` ` `if` `(mark[i] % 2) ` ` ` `cout << i << ` `" "` `; ` ` ` `} ` ` ` ` ` `// print even number of nodes ` ` ` `cout << ` `"\nThe levels with even number of nodes are: "` `; ` ` ` `for` `(` `int` `i = 1; i <= maxLevel; i++) { ` ` ` `if` `(mark[i] % 2 == 0) ` ` ` `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 ` ` ` `printLevelsOddEven(N, vis, height); ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

**Output:**

The levels with odd number of nodes are: 1 3 4 The levels with even number of nodes are: 2

**Time Complexity**: O(N)

**Auxiliary Space**: O(N)

## Recommended Posts:

- Print all the levels with odd and even number of nodes in it | Set-2
- Print the nodes at odd levels of a tree
- Print Levels of all nodes in a Binary Tree
- Print all nodes between two given levels in Binary Tree
- Given a n-ary tree, count number of nodes which have more number of children than parents
- Calculate number of nodes in all subtrees | Using DFS
- Number of nodes greater than a given value in n-ary tree
- Number of special nodes in an n-ary tree
- Count the number of non-reachable nodes
- Level with maximum number of nodes
- Number of Unicolored Paths between two nodes
- Level with maximum number of nodes using DFS in a N-ary tree
- Count the number of nodes at given level in a tree using BFS.
- Minimize the number of weakly connected nodes
- Count the number of nodes at a given level in a tree using DFS

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.