计算二叉树中的节点数和叶节点数

时间:2014-04-02 08:03:52

标签: c++ binary-tree

计算二叉树的大小和二叉树中的叶子数有点麻烦。应该是一个简单的问题,但我仍然无法搞清楚。

所以我收到一个错误:“错误:没有匹配函数来调用â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;
}

注意:我知道不建议将接口放在单独的文件中。但这是我必须这样做的方式。

2 个答案:

答案 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);这样的行无法正常工作,因为你试图将一个对象实例添加到一个整数中,而这个整数并没有。很有道理。