2014-04-02 4 views
0

내 바이너리 트리의 크기 및 내 바이너리 트리의 리프 수를 계산하는 데 약간의 문제가 있습니다. 간단한 문제 여야하지만, 그럼에도 불구하고 그것을 알아내는 데 어려움이 있습니다. "â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; 
} 

참고 : 별도의 파일에 인터페이스를 포함시키지 않는 것이 좋습니다. 그러나 이것이 내가해야 할 일이다.

+0

왜 그 라인에서 재귀를 적용하지 않고 생성자를 호출합니까? – BeerBaron

답변

2

이 함수 내에서 재귀 호출이 필요하지만 대신 노드를 만들고 정수에 노드를 추가하려고합니다. 당신은 변화의 이러한 종류의 필요 : 당신은 역 참조 BinaryNode에 하나를 가지고

count += leaf_nodes(t->leftNode); //BinaryNode(t->leftNode); //line 230 
+0

그것은 효과가 있었다. 고마워요 .-) –

0

을 * BinaryNode 생성자 통화에서 포인터,

예 :

BinaryNode(*(t->leftNode)); 

이나 걸릴 BinaryNode 생성자를 제공하기 위해 BinaryNode*을 인수로 사용하십시오.

이미 언급 한 것처럼 개체 인스턴스를 정수에 추가하려고 시도했기 때문에 count += BinaryNode(t->leftNode);과 같은 줄은 작동하지 않으므로별로 의미가 없습니다.

+0

그 중 하나만 문제입니다. 그가'count + = BinaryNode (...) '를한다는 사실은 도움이되지 않는다. 그리고 당신의 대답이 그가 지금 가지고있는 컴파일러 오류를 수정하는 동안, 그것은 새로운 것들을 유도 할 것이다. –

+0

아 그래, 정말로. – Ashalynd

관련 문제