从平面数据生成层次结构

时间:2016-03-18 13:15:00

标签: java hierarchy hierarchical-data trie hierarchical

我需要从平面数据生成层次结构。这个问题不适用于家庭作业或面试,尽管我认为它可以为任何一个做好榜样。我看过thisthis以及this,但这些都不符合我的情况。

我的数据如下。我有一个对象列表。每个对象都有一个面包屑和一个文本。示例如下:

Object 1:
---------
breadcrumb: [Person, Manager, Hourly, New]
text: hello world

Object 2:
---------
breadcrumb: [Person, Manager, Salary]
text: hello world again

我需要将其转换为层次结构:

Person
  |--Manager
       |--Hourly
            |--New
                 |--hello world
       |--Salary
             |--hello world again

我在Java中这样做,但任何语言都可以。

1 个答案:

答案 0 :(得分:3)

您需要一个Trie数据结构,其中每个Node都包含子项     List<Node>

  1. Trie本身应包含一个Node - root,最初为空;

  2. 当新序列到达时,迭代其项目,尝试在当前Node的现有子项中找到相应的值,如果找到相应的项目则向前移动。这样就可以找到trie中存在的最长前缀,与给定序列相同;

  3. 如果最长公共前缀未覆盖整个序列,请使用剩余项目构建一个节点链,其中每个节点只有一个子节点(下一个项目),并将其作为子节点附加到您停止的节点在步骤(2)。

  4. 你知道,这并不容易。实施代码很长而且不明显。不幸的是,JDK没有标准的trie实现,但你可以尝试找到一些现有的或自己编写的。

    有关详细信息,请参阅https://en.wikipedia.org/wiki/Trie#Algorithms