I'm no math major, but the running average idea is something like this:
can you add these as static members to BST? Static because you need this for the whole tree, not just for a single node:
...
static double m_averageSoFar; // used only in findAverage()
static double m_averageCount; // ditto
...
and those get initialized to zero SOMEHOW when you call findAverage for the very first time. Ick ick ick. Like "if (node == &root) " I hate that!
for each node, you would say something like:
// reconstitute the total and add this node's value
double totalSoFar = (m_averageSoFar * m_averageCount) + (double)myValue;
m_averageCount += 1.0; // account for this new node
m_averageSoFar = (totalSoFar / m_averageCount); // running average
Have you considered the possability that the lesson here is that some things don't directly lend themselves to a recursive algorithm? That maybe something like computing the total value and count might be well suited to recursion, but average needs:
call a different recursive function (like getting total value/count)
?
Maybe its a trick question! :-)