- Trending Categories
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
Physics
Chemistry
Biology
Mathematics
English
Economics
Psychology
Social Studies
Fashion Studies
Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Find multiplication of sums of data of leaves at same levelss in C++
Concept
With respect of a given Binary Tree, return following value for it.
With respect of every level, calculate sum of all leaves if there are leaves at this level. Else ignore it.
Calculate multiplication of all sums and return it.
Input
Root of following tree 3 / \ 8 6 \ 10
Output
80
First level doesn’t have leaves. Second levelhas one leaf 8 and third level also has one leaf 10. So result is 8*10 = 80
Input
Root of following tree 3 / \ 8 6 / \ \ 9 7 10 / \ / \ 2 12 5 11
Output
270
First two levels don't have leaves. Thirdlevel has single leaf 9. Last level has fourleaves 2, 12, 5 and 11. So result is 9 * (2 + 12 + 5 + 11) = 270
Method
With respect of one Simple Solution, we recursively calculate leaf sum for all level startingfrom top to bottom. After that multiply sums of levels which have leaves. Here, time complexity of this solutionwould be O(n^2).
Again With respect of an Efficient Solution, we implement Queue based level order traversal. Here, while doing the traversal, we separately process all different levels.With respect of every processed level, verify if it has a leaves. Inthis case, if it has then calculate sum of leaf nodes. At last, return product of all sums.
Example
/* Iterative C++ program to find sum of data of all leaves of a binary tree on same level and then multiply sums obtained of all levels. */ #include <bits/stdc++.h> using namespace std; // Shows a Binary Tree Node struct Node1 { int data1; struct Node1 *left1, *right1; }; // Shows helper function to check if a Node is leaf of tree bool isLeaf(Node1* root1){ return (!root1->left1 && !root1->right1); } /* Compute sum of all leaf Nodes at each level and returns multiplication of sums */ int sumAndMultiplyLevelData(Node1* root1){ // Here tree is empty if (!root1) return 0; int mul1 = 1; /* Used To store result */ // Build an empty queue for level order tarversal queue<Node1*> q1; // Used to Enqueue Root and initialize height q1.push(root1); // Perform level order traversal of tree while (1) { // NodeCount1 (queue size) indicates number of Nodes // at current lelvel. int NodeCount1 = q1.size(); // Now if there are no Nodes at current level, we are done if (NodeCount1 == 0) break; // Used to initialize leaf sum for current level int levelSum1 = 0; // Shows a boolean variable to indicate if found a leaf // Node at current level or not bool leafFound1 = false; // Used to Dequeue all Nodes of current level and Enqueue all // Nodes of next level while (NodeCount1 > 0) { // Process next Node of current level Node1* Node1 = q1.front(); /* Now if Node is a leaf, update sum at the level */ if (isLeaf(Node1)) { leafFound1 = true; levelSum1 += Node1->data1; } q1.pop(); // Add children of Node if (Node1->left1 != NULL) q1.push(Node1->left1); if (Node1->right1 != NULL) q1.push(Node1->right1); NodeCount1--; } // Now if we found at least one leaf, we multiply // result with level sum. if (leafFound1) mul1 *= levelSum1; } return mul1; // Here, return result } //Shows utility function to create a new tree Node Node1* newNode(int data1){ Node1* temp1 = new Node1; temp1->data1 = data1; temp1->left1 = temp1->right1 = NULL; return temp1; } // Driver program to test above functions int main(){ Node1* root1 = newNode(3); root1->left1 = newNode(8); root1->right1 = newNode(6); root1->left1->right1 = newNode(7); root1->left1->left1 = newNode(9); root1->left1->right1->left1 = newNode(2); root1->left1->right1->right1 = newNode(12); root1->right1->right1 = newNode(10); root1->right1->right1->left1 = newNode(5); root1->right1->right1->right1 = newNode(11); cout << "Final product value = " << sumAndMultiplyLevelData(root1) <<endl; return 0; }
Output
Final product value = 270