내 바이너리 트리의 크기 및 내 바이너리 트리의 리프 수를 계산하는 데 약간의 문제가 있습니다. 간단한 문제 여야하지만, 그럼에도 불구하고 그것을 알아내는 데 어려움이 있습니다. "âBinaryNode :: BinaryNode에 전화 A (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;
}
참고 : 별도의 파일에 인터페이스를 포함시키지 않는 것이 좋습니다. 그러나 이것이 내가해야 할 일이다.
왜 그 라인에서 재귀를 적용하지 않고 생성자를 호출합니까? – BeerBaron