【问题标题】:recursively building trees递归构建树
【发布时间】:2014-03-12 15:54:36
【问题描述】:

我最近开始使用haskell,并尝试创建一棵树。

我的定义如下:

import Data.Char (toLower, toUpper)
import Data.Tree (Tree(Node))
import qualified Data.Set as Set
import Data.Set (Set, empty, insert)

data Mt = Leaf Integer | Branch Integer Integer Mt deriving Show

buildTree  :: a −> b −> Mt

我觉得自己完全迷失了。谁能帮我写这个函数?

【问题讨论】:

标签: tree


【解决方案1】:
import qualified Data.List as L
data Mt = Null | Node Integer [Mt] deriving Show


buildTree _ [] = Null
buildTree [] _ = Null
buildTree prelist postlist = 
  let n = head prelist 
      restofnodespre = tail prelist 
      restofnodespost = init postlist 
      subtrees = maketree restofnodespre restofnodespost
      treelist = map (\(pr, ps) -> buildTree pr ps) subtrees
  in
      Node n treelist



maketree _ [] = []
maketree [] _ = []
maketree pre post = 
  let s = head pre 
      rest = takeWhile (/=s) post 
      newpost = rest ++ [s]
      newpre = L.intersect pre newpost 
      remainingpre = pre L.\\ newpre
      remainingpost = post L.\\ newpost
  in
      (newpre , newpost): (maketree remainingpre remainingpost)

【讨论】:

    猜你喜欢
    • 2013-08-04
    • 2021-06-18
    • 2021-02-09
    • 2020-06-05
    • 2014-08-17
    • 2013-10-24
    • 2019-04-14
    • 2014-03-20
    • 2017-05-25
    相关资源
    最近更新 更多