【问题标题】:binary search tree, non recursive using stack二叉搜索树,非递归使用栈
【发布时间】:2013-04-21 11:06:06
【问题描述】:

关于在一个 .h 文件中包含两个单独的类,我应该知道些什么?

我有一个包含所有成员以及公共和私有函数的二叉搜索树类。

class BinarySearchTree
{
   struct Node {
      Node* left;
      Node* right;
      int val;
   };
};

并遵循该代码,我想设计一个指向该二叉搜索树节点的指针堆栈。在同一个.h 文件中我有

class stack
{
  Node* array;
  //

};

Visual Studio 不显示链接,也不识别 Node*。可以在一个 .h 文件中声明两个单独的类,还是实现嵌套在二叉搜索树类中的堆栈类更好?

【问题讨论】:

    标签: c++ recursion tree stack binary-search-tree


    【解决方案1】:

    您已经声明了一个名为 Node 的 struct 嵌套在类 BinarySearchTree 中,因此如果您想在类之外引用该 struct,您需要像这样引用它:

    class stack
    {
      BinarySearchTree::Node* array;
      //
    
    };
    

    这是否是一个好的设计是一个全新的问题,所以我建议在提出更多问题之前先进一步了解实现。

    编辑

    如您所见,如果您想在课堂外使用嵌套结构 public,则必须创建它。这本身并不一定是坏的或错误的。你没有暴露数据,只是一个声明。

    你有两个选择:

    1. 将嵌套结构公开。
    2. 将嵌套结构置于封闭类之外。

    就个人而言,我会选择第一个选项。

    【讨论】:

    • 感谢您的回复。但是节点被声明为私有的。我尝试了您的建议,VS 识别出链接但显示错误:无法访问。但我认为将节点声明为公共不是一个好主意。 @RogerRowland 之前谢谢。
    • 啊,所以你确实走得更远了;-)
    • 是的。由于我只被要求提供 1 个 .h 文件,您认为实现嵌套的堆栈类是否可行? @RogerRowland
    • 谢谢。我会按照你的建议去做。我感谢您的帮助! @RogerRowland
    • 我使用继承并将 BST 作为派生堆栈类的基类。我声明了受保护的结构,从而使用户无法直接访问节点。你认为这是个好主意吗?谢谢@RogerRowland
    猜你喜欢
    • 2013-04-21
    • 1970-01-01
    • 2014-01-02
    • 2021-07-03
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    相关资源
    最近更新 更多