# Difference between sums of odd level and even level nodes in an N-ary Tree

Given an N-ary Tree rooted at 1, the task is to find the difference between the sum of nodes at the odd level and the sum of nodes at even level.

Examples:

Input:
4
/  |   \
2  3    -5
/ \       /  \
-1   3   -2    6
Output: 10
Explanation:
Sum of nodes at even levels = 2 + 3 + (-5) = 0
Sum of nodes at odd levels = 4 + (-1) + 3 + (-2) + 6 = 10
Hence, the required difference is 10.

Input:
1
/ |  \
2  -1  3
/  \        \
4    5        8
/             / |    \
2            6  12   7

Output: -13

Approach: To solve the problem, the idea is to find the respective sums of the nodes at the even and odd levels using Level Order Traversal and calculate the difference between them. Follow the steps below to solve the problem:

• Initialize a Queue to store nodes and their respective levels.
• Initialize variables evenSum and oddSum to store the sum of nodes at the even and odd levels respectively.
• Push the root of the N-ary Tree along with its corresponding level, i.e., 1, into the Queue.
• Now, iterate and repeat the following steps until the Queue becomes empty:
• Pop the nodes from the Queue. Store the level of the popped node in a variable, say currentLevel.
• If currentLevel is even, add the value of the node to evenSum. Otherwise, add to oddSum.
• Push all its children to the Queue and set their respective levels as currentLevel + 1.
• Once the above steps are completed, calculate and print the difference between oddSum and evenSum.

Below is the implementation of the above approach:

 // C++ Program to implement // the above approach #include using namespace std;   // Structure of a node // of an n-ary tree struct Node {     int val;     vector children; };   // Function to create a // new tree node Node* newNode(int val) {     Node* temp = new Node;     temp->val = val;     return temp; }   // Function to find the difference // between of sums node values of // odd and even levels in an N-ary tree int evenOddLevelDifference(Node* root) {     // Store the sums of nodes at     // even and odd levels     int evenSum = 0, oddSum = 0;       // Initialize a queue to store     // pair of node and level     queue > q;       // Push the root into the     // queue with level 1     q.push({ root, 1 });       // Iterate all levels     // of tree are traversed     while (!q.empty()) {           // Store the node at the         // front of the queue         pair currNode             = q.front();           // Pop the front node         q.pop();           // Store the current level         int currLevel             = currNode.second;           // Store the current node value         int currVal             = currNode.first->val;           // If current node         // level is odd         if (currLevel % 2)               // Add to odd sum             oddSum += currVal;         else               // Add to even sum             evenSum += currVal;           // Push all the children of current node         // with increasing current level by 1         for (auto child : currNode.first->children) {             q.push({ child, currLevel + 1 });         }     }       // Return the difference     return (oddSum - evenSum); }   // Driver Code int main() {     // Create the N-ary Tree     Node* root = newNode(4);     root->children.push_back(newNode(2));     root->children.push_back(newNode(3));     root->children.push_back(newNode(-5));     root->children[0]->children.push_back(newNode(-1));     root->children[0]->children.push_back(newNode(3));     root->children[2]->children.push_back(newNode(-2));     root->children[2]->children.push_back(newNode(6));       cout << evenOddLevelDifference(root);       return 0; }

Output:
10

Time Complexity: O(N)
Auxiliary Space: O(N)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

Check out this Author's contributed articles.

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.

Improved By : sanjeev2552

Article Tags :
Practice Tags :