计算二叉树的大小和二叉树中的叶子数有点麻烦。应该是一个简单的问题,但我仍然无法搞清楚。
所以我收到一个错误:“错误:没有匹配函数来调用âNinaryNode:: BinaryNode(BinaryNode *&)â/ strong>”。这发生在第218,219,230,232行(我的.cpp文件中)。全部带有我头文件中的注释: 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;
}
注意:我知道不建议将接口放在单独的文件中。但这是我必须这样做的方式。
答案 0 :(得分:2)
您需要从这些函数中进行递归调用,而是尝试创建节点并将节点添加到整数。您需要进行此类更改:
count += leaf_nodes(t->leftNode); //BinaryNode(t->leftNode); //line 230
答案 1 :(得分:0)
你要么在调用BinaryNode构造函数时取消引用BinaryNode *指针,
例如:
BinaryNode(*(t->leftNode));
或提供将BinaryNode*
作为参数的BinaryNode构造函数。
这还不是全部,因为正如已经提到的那样,像count += BinaryNode(t->leftNode);
这样的行无法正常工作,因为你试图将一个对象实例添加到一个整数中,而这个整数并没有。很有道理。