如何访问子类成员



我在访问子类节点的数据成员时遇到问题。

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;
}

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

问题是您尝试通过类类型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;

最新更新