【问题标题】:Can I make a binary search tree with this?我可以用这个做一个二叉搜索树吗?
【发布时间】:2010-02-08 02:33:42
【问题描述】:

我以前做过 BST。我可以不用修改就用它来制作 BST 吗?

template <class Item>
class binary_tree_node
{
  public:

  private:
    Item data_field;
    binary_tree_node *left_ptr;
    binary_tree_node *right_ptr;
};

我尝试用它制作 BST,但遇到了一些问题。一方面,当我创建根节点时,我无法访问指向其子节点的指针。

【问题讨论】:

  • 我认为展示公共成员函数是什么很重要。如果一切都是私密的,那么不,不能这样做。
  • 你说“我以前做过 BST”——那为什么不把这个和你以前的解决方案比较一下呢?

标签: c++ binary-tree treenode


【解决方案1】:

不,您将无法使用“在此处放置公共成员函数”的类创建 BST。

如果没有一些非常老套的 typedef 和宏,它甚至无法编译。

【讨论】:

  • 我本来打算投反对票并吐槽这个答案有多不专业......然后我看到他说“没有修改”。
  • @Platinum:不,他只编辑了标签并修复了缩进 - 点击edited x mins ago查看编辑历史。
  • OP 现在已从问题中删除了该行。现在适当的答案可能是“不,您将无法使用绝对没有公共字段或方法的类来制作 BST”。
【解决方案2】:

没有修改,没有。

但是“在此处放置公共成员函数”这一行正在大声疾呼您应该对其进行修改。

既然你说的是权限问题,那就说明你在尝试使用免费功能。但由于指针是私有的,您将无法访问它们。

你应该做的是创建成员函数。例如:

class binary_tree_node
{
  public:
    binary_tree_node()
    {
    }

    bool is_item_in_tree(const Item &item)
    {
    }

    ...
};

无论如何,我建议您复习一下有关可见性和 OOP 的 C++ 基础知识。

【讨论】:

  • 是的,我明白你在说什么。为了访问子指针,我需要创建这样做的类函数。
【解决方案3】:

通常情况下,你应该为新的Item类提供比较接口,因为在插入和删除操作中,需要比较。

没有给出具体信息,所以不知道你是否使用&lt;&gt;等关系运算符。但是如果你使用它们,你应该确保新的Item类支持这些运算符.

我建议您添加一个通用比较类名称Comp 来为Item 类提供比较接口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多