简体   繁体   中英

recursively building trees

I've recently started haskell and I tried to create a tree.

I'm given the definitions as:

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

I feel myself totally lost. Can anyone help me to write that function?

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)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM