Могу ли я создать двоичное дерево поиска с этим? - PullRequest
0 голосов
/ 08 февраля 2010

Я делал 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 с этим, но столкнулся с некоторыми проблемами.Во-первых, когда я создаю корневой узел, я не могу получить доступ к указателям на его дочерние узлы.

Ответы [ 3 ]

3 голосов
/ 08 февраля 2010

Нет, вы не сможете создать BST с классом, который говорит "разместите здесь публичные функции-члены".

Он даже не скомпилируется без каких-либо хакерских typedefs и макросов.

2 голосов
/ 08 февраля 2010

без изменений, нет.

Но эта строка «разместить здесь публичные функции-члены» кричит о том, что вы должны ее изменить.

Поскольку вы говорите о проблеме с разрешениями, это означает, что вы пытаетесь использовать бесплатные функции. Но поскольку указатели являются частными, у вас не будет к ним доступа.

Что вам следует делать, так это создавать функции-члены. Например:

class binary_tree_node
{
  public:
    binary_tree_node()
    {
    }

    bool is_item_in_tree(const Item &item)
    {
    }

    ...
};

В любом случае, я бы порекомендовал пересмотреть основы C ++, касающиеся видимости и ООП.

0 голосов
/ 08 февраля 2010

Как правило, вы должны предоставить интерфейс сравнения для нового класса Item, поскольку при вставке и удалении операции требуется сравнение.

Конкретная информация не была предоставлена, поэтому я не знаю, используете ли вы операторы отношений < и > и т.д. или нет. Но если вы их используете. Вы должны убедиться, что новый класс Item поддерживает эти операторы .

Я бы посоветовал вам добавить одно общее имя класса компарации Comp, чтобы обеспечить интерфейс компарации для класса Item.

...