Реализация дерева в C ++ - PullRequest
       5

Реализация дерева в C ++

1 голос
/ 10 сентября 2010

Я пытаюсь реализовать общее иерархическое дерево для проекта C ++ Linux.

Однако я не смог найти никаких контейнеров стандартного дерева библиотек.

Существуют ли они?

Заранее спасибо, Тим

Ответы [ 6 ]

5 голосов
/ 10 сентября 2010

Вот простой способ создания иерархического дерева (n-арного без специальных свойств), используя контейнеры STL Он не является готовым, но он очень прост и использует некоторые свойства STL. Чтобы создать собственный поиск, вам нужно будет реализовать свои собственные алгоритмы, но это должно быть довольно безболезненно.

template<typename T>
class TreeNode
{
public:
    TreeNode()
    {
    }

    TreeNode(const T& value)
        : Value(value)
    {
    }

    T Value;
    std::list<TreeNode<T> > Children;
};
3 голосов
/ 10 сентября 2010

Набор STL и карта оба используют двоичные деревья внутри

2 голосов
/ 10 сентября 2010

Boost имеет контейнер PropertyTree, который может быть тем, что вы ищете. Он в основном состоит из узлов, которые хранят значение и произвольное количество дочерних узлов. Boost также близок к стандартному.

http://www.boost.org/doc/libs/1_44_0/doc/html/property_tree.html

2 голосов
/ 10 сентября 2010

std: map <> реализован с использованием дерева, вы можете использовать это.Это единственный «стандартный контейнер библиотечного дерева», о котором я могу подумать на данный момент.

1 голос
/ 10 сентября 2010

для этого нет класса STL по умолчанию. Вы могли бы написать свой собственный класс дерева, используя компоненты STL, или вы могли бы попробовать эту библиотеку дерева, подобную STL, попробовать:

http://tree.phi -sci.com /

0 голосов
/ 10 сентября 2010

Нет стандартных библиотечных контейнеров для построения древовидной структуры. Но если вы достаточно разбираетесь в теории и хорошо владеете языком программирования (в вашем случае c ++), то создание общего дерева не является сложной задачей.

Начните с создания общих (шаблонизированных) узлов, добавьте два указателя для детей (двоичное дерево) или список указателей для детей (n-арный).

struct Node
{
    int data;
    Node *left;
    Node *right;
}

Вот, пожалуйста. Создайте экземпляр, и у вас будет корневой узел. Создайте больше узлов и прикрепите их к корневому узлу как дочерние. Повторите то же самое. Игра с деревьями - это здорово!

В Интернете вы найдете множество примеров. Здесь есть один Полностью поддерживаю ответ Ники.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...