我在访问子类节点的数据成员时遇到问题。
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;