如何访问子类成员

时间:2014-11-18 01:20:39

标签: c++ data-structures

我无法访问子类Node的数据成员。

template <class T>
class BinarySearchTree {
private:
    class Node {
    public:
        T data;
        Node * left;
        Node * right;
        Node * parent;

        Node() :left(NULL), right(NULL), parent(NULL) {};
        Node(const T& item) {
            data = item;
            left = NULL;
            right = NULL;
            parent = NULL;
        };
    };

我正在尝试为这个二叉搜索树getHeight()和getSize()编写两个函数,但是我需要访问二叉搜索树的左右节点(或子节点)才能计算它。这是我试图尝试这样做的代码:

template <class T>
int BinarySearchTree<T>::getHeight() const {
    //TODO
    int number = 0;
    Node * heightNode = new Node();
    heightNode = _root;
    if (left == NULL && right == NULL){
        return 0;
    }
    else
    {
        number = max(right->height(), left->height()) + 1;
    }
    return height;
}

我的思考过程是下降两个子树并返回每个子树的最大值来计算高度。

template <class T>
int BinarySearchTree<T>::getSize() const {
    // TODO
    int size;
    if (){
        return 0;
    }
    inorderHelper(cout, this->Node->left); //L 
    size++;                               //V
    inorderHelper(cout, this->Node->right);//R
    return size;
}

这里我的思考过程是在二叉搜索树上执行顺序遍历,递增每个节点的大小。

1 个答案:

答案 0 :(得分:0)

问题是您尝试通过类类型Node访问非静态成员,而不是通过Node的实例访问它们。虽然您没有包含BinarySearchTree的足够相关部分,但看起来您有一个名为_root的成员,该成员基于其他代码似乎是树中的根节点。假设这是正确的,则需要更新以下行。

inorderHelper(cout, this->Node->left); //L 
size++;                               //V
inorderHelper(cout, this->Node->right);//R

......这样的事情

inorderHelper(cout, _root->left); //L 
size++;                               //V
inorderHelper(cout, _root->right);//R

不幸的是,由于您的代码不完整,因此无法提供树的实际大小。

getHeight()中也有内存泄漏。以下代码创建Node的实例,但在将_root分配给heightNode之前从不删除它。

Node * heightNode = new Node();
heightNode = _root;

这可能会改为

Node * heightNode = _root;