我无法访问子类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;
}
这里我的思考过程是在二叉搜索树上执行顺序遍历,递增每个节点的大小。
答案 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;