在类节点上从结构中创建二叉搜索树会不好?

时间:2014-08-01 06:17:03

标签: c++ visual-studio-2012 binary-search-tree

我不确定我是否应该......或者不应该使用结构来创建二叉搜索树,另一种选择是从单独的节点类创建节点。带有数据,左右。哪一个更好?为什么?

继承我的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

2 个答案:

答案 0 :(得分:1)

最好创建两个类,一个用于BST,另一个用于节点。它们是两种不同的抽象。节点是一种更简单的抽象,其主要目的是保存定义BST所必需的数据。 BST是更高级别的抽象。这是一个有自己约束和期望的集合类。

答案 1 :(得分:1)

我不确定你是否理解struct和class之间的区别,但基本上是:

struct

默认情况下,所有成员都可以公开访问

class

默认情况下,对其所有成员都有私人访问权限。

你可以用它们来实现同样的功能,但是许多程序员,包括我自己,都倾向于使用POD对象(普通旧数据)的结构进行直接访问(这样可以更容易地编写更少)。

那就是说,我认为你应该将你的Node类放在一个不同的文件中,因为BST和Node类是非常不同的。由于您为BST类提供了一个模板,我假设您将使用的不仅仅是Node类,这为分离您可能不使用Node类的项目的文件提供了更多理由。如果您不打算使用的不仅仅是Node类,您可以考虑删除模板并在BST类中定义Node struct / class!