c++ - 创建树数据结构 - 不同的方法

标签 c++ tree-structure

过去我问过很多关于树数据结构的问题,但我似乎没有以 C++ 的正确方式处理它。

在我编写数据结构的方式中,我想不出一种关于如何拥有“结束”或“开始”迭代器的方式。因此,我采用了将所有功能都包含为成员方法的方法。而不是使用迭代器和算法的标准方法。

现在我的树结构的目标是:1) 尽可能快地将一个分支从一棵树移动到另一棵树。 2)每个分支都应该是一棵独立的树。在树上工作的 Action 也应该能够在分支上执行。

我所做的只是创建一个类,其中包含一个 vector 。 - vector 内部是此类的其他对象。示例(我在这里只发布了一个最小的示例,因为我现在面临的最大问题是类太大而无法处理):

template <typename ValTy>
class Tree {
private:
    std::vector<std::unique_ptr<Tree> > subtrees;
    ValTy value;
};

正如您看到的那样,我可以从 subtrees 中取出一些东西 - 并将其用作树或复制它。 然而,由于顶级树没有指示有多少子树(或多少层),所以不可能声明“结束迭代器”?像 std::find() 这样的算法不会遍历整个树(及其所有子树)吗?

是否有可能利用这些算法,同时仍然保持易于“分支”的结构?

最佳答案

您可以通过保留一堆子树 vector 的迭代器对来迭代这样的树。这种 vector 的增量意味着最顶层子树迭代器的增量,如果最底端的迭代器在其末尾,则随后进行清理。

此 vector 的 end() 迭代器将只是空堆栈。

关于c++ - 创建树数据结构 - 不同的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8896120/

相关文章:

javascript - 使用 JSON 构建层次结构树

sql-server - 如何在数据库中存储目录/层次结构/树结构?

C++ 条件变量和等待

c++ - 变量赋值并传递给其他函数

c++ - 切换菜单计算器不会显示算术

javascript - 无法读取属性 "match"(nestedSortable)

recursion - Django CMS 多级下拉菜单

c++ - 如何在 Windows 中创建扩展(自定义)文件属性?

c++ - 如何在 C++ 中重载 << 运算符以重复使用?

java - 如何在 HashMap 中保存树结构?