java 表达式转化二叉树_Haskell - 将后缀表达式转换为二叉树

我想将postfix表达式转换为二叉树 . 我的函数将标记列表作为参数(字符串) .

每次我给函数任何输入时,调试器都会写一条消息:函数“add”中的非详尽模式 .

我的想法是:在令牌之后读取令牌并确定它是否是运算符或操作数 . 如果是操作数,请不要将任何节点保存到树中并将数字存储到堆栈中 . 否则,我创建一个带有运算符的节点,从堆栈中弹出符号,将它们设置为新节点的子节点,并将运算符推送到堆栈 .

如果字符串列表为空,则函数将打印二叉树 .

有人会向我解释,为什么函数会给出非详尽的模式错误,我该如何修复这个函数?

data Tree = Leaf String | Empty | Node Tree String Tree deriving (Show)

add :: Tree -> [String] -> [Tree] -> Tree

add (Node l v p) [] stack = (Node l v p)

add Empty (x:xs) []

| x `elem` ["*","-","+"] = add (Leaf x) xs [Leaf x]

| otherwise = add Empty xs [Leaf x]

add Empty (x:xs) (a:b:bs)

| x `elem` ["*","-","+"] = add (Node b x a) xs (Leaf x:a:b:bs)

| otherwise = add Empty xs (Leaf x:a:b:bs)

add (Leaf x) token (a:b:bs)

| x `elem` ["*","-","+"] = add (Node b x a) token (Leaf x:bs)

| otherwise = Leaf x

add (Node l v p) (x:xs) (a:b:bs)

| x `elem` ["*","-","+"] = add (Node b x a) xs (Leaf x:bs)

| otherwise = add (Node l v p) xs (Leaf x:a:b:bs)

parse :: String -> Tree

parse input = add Empty (words (toPostfix input)) []

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值