Write a function that returns true if the given Binary Tree is SumTree else false. A SumTree is a Binary Tree where the value of a node is equal to sum of the nodes present in its left subtree and right subtree. An empty tree is SumTree and sum of an empty tree can be considered as 0. A leaf node is also considered as SumTree.
Following is an example of SumTree.
26
/ \
10 3
/ \ \
4 6 3
/* A utility function to get the sum of values in tree with root
as root */ int sum(Node node) { if (node == null) return 0; return sum(node.left) + node.data + sum(node.right); } /* returns 1 if sum property holds for the given node and both of its children */ int isSumTree(Node node) { int ls, rs; /* If node is NULL or it's a leaf node then return true */ if ((node == null) || (node.left == null && node.right == null)) return 1; /* Get sum of nodes in left and right subtrees */ ls = sum(node.left); rs = sum(node.right); /* if the node and both of its children satisfy the property return 1 else 0*/ if ((node.data == ls + rs) && (isSumTree(node.left) != 0) && (isSumTree(node.right)) != 0) return 1; return 0; }
No comments:
Post a Comment