2012-04-07 60 views
1

Haskell库中是否存在这种数据结构?我做了一些搜索,但找不到有用的东西。我想使用现有的类型而不是定义自己的类型 - 它看起来应该在那里。带边缘信息的Haskell树

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

的想法是,它非常类似于Data.Tree,但边缘可以保存信息以及节点。

如果你有一个通过树(类型[e])的路径,你可以在O(log(n))中找到rootLabel(类型n)。据我所知,你不能用Data.Tree来做到这一点,因为你必须扫描每个节点的子节点,以查找它是否是路径前进的节点。这是因为Data.Tree的subForest的类型是[Tree a]。

特别,我很感兴趣的是暴露了一个功能类似于一个类型的实现:

getNextLevel :: e -> MyTree e n -> MyTree e n 

,将下潜更深一层的树,给定边穿越。

回答

0

您可以随时使用图库,并确保自己保持树状。

4

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

+0

Data.Trie假定e的类型是ByteString;我希望有一些更一般的东西= \ – Litherum 2012-04-08 01:10:36

+2

@Litherum我的计数,有十二个不同的软件包提供尝试,并且只有其中一个专门用于'ByteString'。也许你应该继续寻找。 – 2012-04-08 01:21:20