我不确定我是否应该......或者不应该使用结构来创建二叉搜索树,另一种选择是从单独的节点类创建节点。带有数据,左右。哪一个更好?为什么?
继承我的BST代码
template <typename T>
class BST : public SearchableADT<T>
{
public:
BST(void){ head = NULL; numnodes = 0; }
virtual ~BST(void);
virtual int loadFromFile(string filename);
virtual void clear(void);
virtual void insertEntry(T info);
virtual void deleteEntry(T info);
virtual bool isThere(T info);
virtual int numEntries(void);
//needed for comparison to AVL
int BST<T>::height(t_node* tPTR);
protected:
struct t_node
{
string data;
t_node *L;
t_node *R;
};
int numnodes;
t_node* head;
t_node* cPTR; //current pointer
t_node* pPTR; //parent pointer
t_node* tPTR; //temporary pointer
}; // end of class BST
答案 0 :(得分:1)
最好创建两个类,一个用于BST,另一个用于节点。它们是两种不同的抽象。节点是一种更简单的抽象,其主要目的是保存定义BST所必需的数据。 BST是更高级别的抽象。这是一个有自己约束和期望的集合类。
答案 1 :(得分:1)
我不确定你是否理解struct和class之间的区别,但基本上是:
struct
默认情况下,所有成员都可以公开访问
class
默认情况下,对其所有成员都有私人访问权限。
你可以用它们来实现同样的功能,但是许多程序员,包括我自己,都倾向于使用POD对象(普通旧数据)的结构进行直接访问(这样可以更容易地编写更少)。
那就是说,我认为你应该将你的Node类放在一个不同的文件中,因为BST和Node类是非常不同的。由于您为BST类提供了一个模板,我假设您将使用的不仅仅是Node类,这为分离您可能不使用Node类的项目的文件提供了更多理由。如果您不打算使用的不仅仅是Node类,您可以考虑删除模板并在BST类中定义Node struct / class!