Haskell树与边缘信息

时间:2012-04-07 22:08:30

标签: haskell tree

这种数据结构是否存在于Haskell库中?我做了一些搜索,但找不到任何有用的东西。我想使用现有的类型而不是定义我自己的类型 - 它似乎应该在那里。

data MyTree e n = Node { rootLabel :: n
                       , subForest :: Map e (MyTree e n)
                       }

这个想法是它与Data.Tree非常相似,但是edge可以保存信息和节点。

如果你有一个穿过树的路径(类型为[e]),你可以在O(log(n))中找到rootLabel(类型为n)。据我所知,你无法使用Data.Tree执行此操作,因为您必须扫描每个节点的子节点以查找它是否是路径前进到的节点。这是因为Data.Tree的subForest的类型是[Tree a]。

特别是,我对一个公开一个类似于:

类型的函数的实现感兴趣
getNextLevel :: e -> MyTree e n -> MyTree e n

,如果有一条边可以遍历,它会在树的深处潜水一层。

2 个答案:

答案 0 :(得分:4)

这种数据类型看起来很像一个trie,Hackage上有很多可用的包。

答案 1 :(得分:0)

您可以随时使用图表库,并确保自己将其保存为树。