用C ++实现树

时间:2010-09-10 16:53:41

标签: c++ linux

我正在尝试为C ++ Linux项目实现通用的分层树。

但我找不到任何标准的库树容器。

有存在吗?

提前致谢, 添

7 个答案:

答案 0 :(得分:5)

这是一种使用STL容器创建分层树(没有特殊属性的n-ary)的简单方法。它不是预先构建的,但它很简单,并且利用了一些STL属性。要创建自己的搜索,你必须实现自己的算法,但这应该是相当轻松的。

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

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

    T Value;
    std::list<TreeNode<T> > Children;
};

答案 1 :(得分:3)

STL设置和映射都在内部使用二进制树

答案 2 :(得分:2)

STD:地图&LT;&GT;使用树实现,您可以利用它。它是目前我能想到的唯一“标准库树容器”。

答案 3 :(得分:2)

Boost有一个PropertyTree容器,可能正是您正在寻找的容器。它基本上由存储值和任意数量的子节点的节点组成。 Boost非常接近标准。

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

答案 4 :(得分:1)

默认情况下没有STL类。您可以使用STL组件编写自己的树类,或者您可以尝试使用类似STL的树库:

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

答案 5 :(得分:0)

没有可用于构建树结构的标准库容器。但是,如果你在理论上足够了解并且使用编程语言(在你的情况下是c ++),那么创建一个通用树并不是一项艰巨的任务。

首先创建通用(模板化)节点,为子节点添加两个指针(二叉树)或子节点指针列表(n-ary)。

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

你去吧。创建一个实例,您就拥有了根节点。创建更多节点并将它们作为子节点附加到根节点。重复相同的。玩树木很棒!

你会在网上找到很多例子。有一个here 完全支持Niki的答案。

答案 6 :(得分:0)

这已经很晚了,但可能会帮助某人。 nlohmann json 或一般的 json,可用于树数据结构

https://github.com/nlohmann/json https://kezunlin.me/post/f3c3eb8/