0

我正在尝试将类别树转换为平面列表。

在类别中,任何类别都可以有 n 个级别的子类别。

For Ex.:

Category1
-SubCategory1
-SubCategory2
--SubCategor1
---SubCategory1
---SubCategory2
----SubCategory1
----SubCategory2
---SubCategory3
--SubCategory2
-SubCategory3

Category2
-SubCategory1
--SubCategory1
---SubCategory1
----SubCategory1
---SubCategory3
-SubCategory3

...etc and so on.

语言不是障碍我只是想制定循环/嵌套循环来创建此逻辑以将其转换为扁平列表。

任何帮助将不胜感激。

提前致谢

4

3 回答 3

2

您的平面列表中的每个条目都将是您的树的一个节点,因为它是根据深度优先搜索访问的。有关更多信息,请参阅此处

编辑:原始帖子被编辑了几次。最初,它看起来像 OP 在一个平面列表之后,因为那将是 BFS 的输出,但在后来的编辑之后,看起来 OP 在一个平面列表之后,因为那将是 DFS 的输出。更一般的情况是“平面列表的每个条目都将是树的一个节点,因为某些遍历函数(例如 BFS 或 DFS)会访问该节点。”

于 2012-05-30T11:31:07.513 回答
1

我不知道您所说的平面列表是什么意思,但是您可以在递归访问子类别时使用堆栈(实现方式,它可以是 STL 向量)来存储当前进度。

我上面提到的“当前进度”应该存储你当前访问的是哪个子类,以便你返回时可以继续访问其他子类。

如果你可以制定一个递归算法,你可以用这种形式重写它。

于 2012-05-30T11:30:40.067 回答
0

您可以使用递归 + std::copy函数轻松完成此操作。

于 2012-05-30T11:48:02.937 回答