Возникли проблемы с подсчетом узлов двоичного дерева - PullRequest
0 голосов
/ 14 мая 2019

При вызове функции Node Counting публично, я получаю несовместимое объявление, и в приватном порядке мои возвраты не соответствуют функции, и я не могу вызвать тестовый драйвер.

Float, int, void, bool (глупо, я знаю).

CPP

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;    
}

Заголовок (я думаю, мне нужно сделать это общедоступным, чтобы я мог вызвать тестовый драйвер, но я мог только объявить в CPP из частного.)

void count(TreeNode *);

Драйвер

cout << "Total Number of Nodes " << endl;
tree.count();
cout << endl;

В тесте драйвера CPP tree.count недоступен, что понятно, поскольку он вызывается из частного, но как публичный вызов объявление несовместимо.

1 Ответ

2 голосов
/ 14 мая 2019
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;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...