Haskell二叉树只有字符

时间:2014-02-05 17:28:07

标签: haskell tree char binary-tree type-variables

让我说我像这样做我的树

data Tree a = EmptyTree | Node a (Tree a) (Tree a) deriving (Show, Read, Eq)

但我想制作一个只使用字符的树,我不需要它作为模板。我知道我的树只会使用chars,如果我像上面的那样,我不能在函数中创建if dataOfNode == ')',因为它表示它是[char]类型并且它需要[a]类型。

如何创建一个只使用字符的树,或者有一种方法可以使用我给出的这种类型的树进行这种类型的检查dataOfNode == ')'。你能给我一个函数的简短例子,让我们说检查这个节点中的数据是否是符号')'?

编辑:
 根据要求,我发布了我想做的函数`

buildTreeHelper :: (Ord a) => String -> a -> Int -> String -> Tree a -> Tree a
buildTreeHelper str blank turn path t
 | str == [] = t
 | front == '(' = buildTreeHelper (tail str) blank 1 ('L':path) (expandTree (reverse path) blank t)
 | front == ')' = buildTreeHelper (tail str) blank 2 (tail path) t
 | turn == 1 = buildTreeHelper (tail str) blank 2 (tail path) (expandTree (reverse path) front t)
 | turn == 2 = buildTreeHelper (tail str) blank 3 ('R':path) (expandTree (reverse path) front t)
 | turn == 3 = buildTreeHelper (tail str) blank 2 (tail path) (expandTree (reverse path) front t)
 where 
  front = head str

逻辑上它没有完成,但我也不能使用它,因为它需要一个字符串,我将char除以char。这就是为什么我确定我只想从字符中创建我的树,所以我可以在函数的开头用type a替换type char。它也有其他错误,但我认为主要观点很明确。

1 个答案:

答案 0 :(得分:2)

您可以轻松地用

替换您的类型定义
data Tree = EmptyTree | Node Char Tree Tree deriving (Show, Read, Eq)

或专门定义将其定义为

的函数
buildTreeHelper :: String -> Char -> Int -> String -> Tree Char -> Tree Char