Вот подход, который может помочь вам с этой проблемой:
1) Получите максимальное значение в вашем BST (просто идите направо, направо, ..., прямо, пока не достигнете листа)
2) следуйте этому псевдокоду:
for i = 0 to MAX_VALUE do
currentNode = root;
while(TRUE)
if (currentNode.Value == i)
apprearanceCount++;
if (i > currentNode.Value)
currentNode = currentNode.RightNode;
else
currentNode = currentNode.LeftNode;
if currentNode == NULL then break; // Don't forget to save appearance count