void BinaryTree::count(TreeNode* root) {
if(root == NULL)
return 0;
else
if(root->left == NULL && root->right == NULL)
return 1;
else
return count(root->left) + count(root->right) + 1;
}
эта операция возвращает int (хотя бы число), она должна иметь подпись, возвращающую число, например
int BinaryTree::count(TreeNode* root)
Ваше определение также сложно ни для чего, может быть
int BinaryTree::count(TreeNode* root) {
return (root == NULL)
? 0
: count(root->left) + count(root->right) + 1;
}
и поскольку он не изменяет экземпляр, сделайте его постоянным
int BinaryTree::count(TreeNode* root) const {
return (root == NULL)
? 0
: count(root->left) + count(root->right) + 1;
}
Наличие
tree.count ();
без аргумента и видимой записи счетчика, вам нужна другая операция, такая как
void BinaryTree::count() const {
cout << count(..the tree node..);
}
эта операция должна быть общедоступной, вероятно, предыдущая является частной
В любом случае лучше не записывать счет, а возвращать его, позволяя вызывающей стороне делать то, что он хочет.
Итак, наконец, что-то вроде:
// I use a _struct because fields accessible by BinaryTree
// but may be a class and BinaryTree is a friend class etc
struct TreeNode {
// ...
TreeNode * left;
TreeNode * right;
// ...
};
class BinaryTree {
public:
// ...
int count() const { return count(tree); }
// ...
private:
// ...
int count(TreeNode *) const;
// ...
TreeNode * tree;
// ...
};
int BinaryTree::count(TreeNode* root) const {
return (root == NULL)
? 0
: count(root->left) + count(root->right) + 1;
}
и где-то cout << "Total Number of Nodes " << tree.count() << endl;