Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 二叉树节点计数有问题_C++_Binary Tree - Fatal编程技术网

C++ 二叉树节点计数有问题

C++ 二叉树节点计数有问题,c++,binary-tree,C++,Binary Tree,当在公共场合调用节点计数函数时,我得到了不兼容的声明,而在私有场合,我的返回与函数不匹配,我无法调用测试驱动程序 Float,int,void,bool(我知道这很愚蠢) CPP Header(我想我需要将其公开,以便调用测试驱动程序,但我只能从Private在CPP中声明。) 司机 cout << "Total Number of Nodes " << endl; tree.count(); cout << endl; cout 该操作返回一个int(至少

当在公共场合调用节点计数函数时,我得到了不兼容的声明,而在私有场合,我的返回与函数不匹配,我无法调用测试驱动程序

Float,int,void,bool(我知道这很愚蠢)

CPP

Header(我想我需要将其公开,以便调用测试驱动程序,但我只能从Private在CPP中声明。)

司机

cout << "Total Number of Nodes " << endl;
tree.count();
cout << endl;
cout
该操作返回一个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()

如果没有arg并明显写入计数,则需要执行其他操作,如

void BinaryTree::count() const {
  cout << count(..the tree node..);
}

在某个地方
cout
BinaryTree::count
请求一个
TreeNode*
作为参数,但
tree.count()作为无参数。如果TreeNode是BinaryTree内部的,则需要一个不带arg的公共操作,以及一个由公共版本调用arg的私有操作
void BinaryTree::count(TreeNode*root){If(root==NULL)返回0;
-显然是错误的。您的函数返回
void
(无),但尝试返回一个值(整数).我可以建议你读一本(或两本)吗.?有些基础知识你还没有掌握。@bruno我对类还很陌生。我已经把它改成了一个int函数,除了测试驱动程序外,一切似乎都正常。我该如何把tree.count变成一个参数呢?@TylerKanz请回答你的问题,并展示
二进制树
类是如何定义的。看来
>BinaryTree::count
可能是
私有的
,因此不能在类外直接调用,但这只是猜测。啊,明白了!谢谢!@πάνταῥεῖ 我知道我们不是一直都同意,我可能已经告诉过你我来这里是为了帮忙而不是踢屁股(我说的是OP,当然不是关于你的^^).对我来说,这个问题并不是离题,我们不会把离题的程度放在同一个水平上:-)@TylerKanz不,这不是一个好问题。在提问之前,你已经错过了发布研究、调试和其他一些事情。@πάνταῥεῖ 对不起,我冒犯了你,违反了规则。就像我说的,我对这件事还不熟悉。@πάνταῥεῖ 我不支持任何人。OP缺少一个最小的完整解决方案。但是,这个答案的下选者可以出现并警告布鲁诺不要这样做或等待MCVC。我发现匿名DV非常糟糕。另一方面,答案一点也不坏。
 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;    
 }
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;    
 }