【发布时间】:2014-04-02 16:09:41
【问题描述】:
在计算二叉树的大小和二叉树中的叶子数量时遇到了一些麻烦。应该是一个简单的问题,但我仍然无法弄清楚。
所以我收到一个错误:“error: no matching function for call to âBinaryNode::BinaryNode(BinaryNode*&)â”。这发生在(我的 .cpp 文件的)第 218、219、230、232 行。所有这些都带有我的头文件中的注释:bet.h:6:注意:候选者是:BinaryNode::BinaryNode() BinaryNode::BinaryNode(const BinaryNode&)。这是我的头文件的第 6 行。所以这里是代码。首先是我的头文件(包含我的接口)的开头:
#include <string>
using namespace std;
struct BinaryNode
{ //This is line 6
string element;
BinaryNode* leftNode;
BinaryNode* rightNode;
};
class BET
{
public:
BET();
BET(const string postfix);
BET(const BET&);
~BET();
bool buildFromPostfix(const string postfix);
const BET& operator= (const BET&);
void printInfixExpression();
void printPostfixExpression();
size_t size();
size_t leaf_nodes();
bool empty();
private:
void printInfixExpression(BinaryNode *n);
void makeEmpty(BinaryNode* &t);
BinaryNode* clone(BinaryNode* t) const;
BinaryNode* headNode;
void printPostfixExpression(BinaryNode *n);
size_t size(BinaryNode *t);
size_t leaf_nodes(BinaryNode *t);
};
接下来,这是我的 .cpp 文件中出现错误的部分。 (它们是私有函数):
/*----Public functions--(calls private functions)----*/
size_t BET::size(){
size(headNode);
}
size_t BET::leaf_nodes(){
leaf_nodes(headNode);
}
/*----Private functions--(returns num nodes)----*/
size_t BET::size(BinaryNode *t){
if(t == NULL)
return 0;
else {
int count = 1;
count += BinaryNode(t->leftNode); //line 218
count += BinaryNode(t->rightNode); //line 219
return count;
}
}
size_t BET::leaf_nodes(BinaryNode *t){
int count = 0;
if (t->leftNode == NULL && t->rightNode == NULL)
count++;
else {
if (t->leftNode != NULL)
count += BinaryNode(t->leftNode); //line 230
if (t->rightNode != NULL)
count += BinaryNode(t->rightNode); //line 232
}
return count;
}
注意:我知道不建议将接口放在单独的文件中。但这是我必须这样做的方式。
【问题讨论】:
-
为什么要调用构造函数而不是在这些行应用递归?
标签: c++ binary-tree