我需要从平面数据生成层次结构。这个问题不适用于家庭作业或面试,尽管我认为它可以为任何一个做好榜样。我看过this和this以及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中这样做,但任何语言都可以。
答案 0 :(得分:3)
您需要一个Trie数据结构,其中每个Node
都包含子项
List<Node>
Trie本身应包含一个Node
- root,最初为空;
当新序列到达时,迭代其项目,尝试在当前Node
的现有子项中找到相应的值,如果找到相应的项目则向前移动。这样就可以找到trie中存在的最长前缀,与给定序列相同;
如果最长公共前缀未覆盖整个序列,请使用剩余项目构建一个节点链,其中每个节点只有一个子节点(下一个项目),并将其作为子节点附加到您停止的节点在步骤(2)。
你知道,这并不容易。实施代码很长而且不明显。不幸的是,JDK没有标准的trie实现,但你可以尝试找到一些现有的或自己编写的。