在haskell中按顺序标记树的深度

时间:2015-10-17 19:49:09

标签: haskell tree label

我基本上提出了与此处提出的问题相同的问题:Haskell label a binary tree through depht-first in-order traversel但答案从未实际给出过,由于缺乏声誉,我无法在那里发表评论。

现在我有一个功能label

label :: MonadState m Int => Tree a -> m (Tree (Int, a))
label Leaf = return Leaf
label (Branch leftTree a rightTree) = do n <- get
                                         modify (+1)      
                                         l' <- label leftTree
                                         r' <- label rightTree
                                         return (Branch l' (n,a) r')

其中Tree a = Leaf | Branch (Tree a) a (Tree a)

现在,这会将树标记为广度优先。现在我想首先标记leftTree,然后标记Branch本身,然后标记rightTree,但我不知道如何实现这一点而另一个线程没有标记{&#39}。进一步帮助我。

1 个答案:

答案 0 :(得分:1)

我刚刚回答了较早的问题here。很抱歉错误地归咎于你。关键在于,当您编写类型时,您还告诉Haskell如何以确保traverse发生在中间的方式get您的数据结构。

您自己本地编写错误的程序是一个您已经正确编写的程序,只需定义您的类型,如果您只知道。