The binary tree above can be represented as the following to calculate the vertical sum of the nodes
class BinaryTreeVerticalSumPrinter
{
public:
BinaryTreeVerticalSumPrinter(){}
~BinaryTreeVerticalSumPrinter(){}
void verticalSum(BinarySearchTree &tree)
{
std::map<int, int> vsum;
verticalSum(tree.root, 0, vsum);
printSum(vsum);
}
private:
void verticalSum(BinaryTreeNode *node, int idx, std::map<int, int> &vsum)
{
if(node)
{
vsum[idx] = vsum[idx] + node->data;
verticalSum(node->left, idx - 1, vsum);
verticalSum(node->right, idx + 1, vsum);
}
}
void printSum(std::map<int, int> &vsum)
{
std::map<int, int>::iterator pos;
std::cout << std::endl;
for(pos = vsum.begin(); pos != vsum.end(); ++pos)
{
std::cout << "Key: " << pos->first << " Value: " << pos->second << std::endl;
}
}
};
No comments :
Post a Comment