在计算我的二叉树的大小以及我的二叉树中的叶数时遇到了一些麻烦。应该是一个简单的问题,但尽管如此我还是很难解决。
所以我收到一个错误:“错误:没有匹配的函数来调用â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;
}
注意:我知道不建议将接口放在单独的文件中。但这就是我要做的方式。
最佳答案
您需要从这些函数中进行递归调用,但您尝试创建一个节点并将该节点添加到整数。您需要进行以下更改:
count += leaf_nodes(t->leftNode); //BinaryNode(t->leftNode); //line 230