Given a binary tree, check if it is a sum tree or not. In a sum tree, value at each non-leaf node is equal to the sum of all elements present in its left and right subtree. The value of a leaf node can be anything.

We can easily solve this problem by using recursion. The idea is to traverse the tree in postorder fashion. Then for each non-leaf node, we check if node’s value is equal to sum of all elements present in its left subtree and right subtree. If this relation do not hold true for any node, then the given binary tree cannot be a sum tree.

**C++ implementation –**

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// Data structure to store a Binary Tree node struct Node { int key; Node *left, *right; }; // Recursive function to check if given binary tree is a sum tree or not int isSumTree(Node *root) { // base case: empty tree if (root == nullptr) return 0; // special case: leaf node if (root->left == nullptr && root->right == nullptr) return root->key; // if root's value is equal to sum of all elements present in its // left and right subtree if (root->key == isSumTree(root->left) + isSumTree(root->right)) return 2*root->key; return INT_MIN; } |

The time complexity of above solution is O(n) and need O(h) extra space for the call stack where h is the height of the tree.

**Thanks for reading.**

Please use ideone or C++ Shell or any other online compiler link to post code in comments.

Like us? Please spread the word and help us grow. Happy coding 🙂