将类别树转换为平面列表的算法

时间:2012-05-30 11:24:43

标签: javascript c++ algorithm logic

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

在类别中,任何类别都可以有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.

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

任何帮助都将受到高度赞赏。

先谢谢

3 个答案:

答案 0 :(得分:2)

您的平面列表的每个条目都将是您的树的节点,因为根据深度优先搜索访问该节点。有关详细信息,请see here

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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