如何检查节点是否是二叉树中的叶子 (Haskell)
How to check if node is a leaf in binary tree (Haskell)
我需要检查一个节点是否是我的二叉树中的叶子。这是我当前的代码。
它向我发送一条错误消息说:
"hw3_71937.hs: C:\Users\lenovo\Desktop\���\��� HASKELL\hw3_71937.hs:(22,1)-(25,91): Non-exhaustive patterns in function isLeaf"
我不知道如何递归检查下一个节点是否是叶子。感谢任何帮助。
门卫:
| <b>tree == Empty</b> = False
永远不会是真的,因为在你的条款的开头:
isLeaf node tree@(<b>Node el left right</b>)
你说这是Node
,不是Empty
。这也是您没有涵盖的情况:如果您传递 Empty
(并且由于递归最终您可以传递 Empty
),则没有模式匹配。
话虽这么说,我认为你把这件事想得太复杂了。你可以这样写:
isLeaf :: Eq a => a -> BTree a -> Bool
isLeaf _ Empty = False
isLeaf x (Node x' Empty Empty) = x == x'
isLeaf x (Node _ l r) = isLeaf x l || isLeaf x r
或带有 where
子句:
isLeaf :: Eq a => a -> BTree a -> Bool
isLeaf x = go
where go Empty = False
go (Node x' Empty Empty) = x == x'
go (Node _ l r) = go l || go r
我需要检查一个节点是否是我的二叉树中的叶子。这是我当前的代码。
它向我发送一条错误消息说: "hw3_71937.hs: C:\Users\lenovo\Desktop\���\��� HASKELL\hw3_71937.hs:(22,1)-(25,91): Non-exhaustive patterns in function isLeaf"
我不知道如何递归检查下一个节点是否是叶子。感谢任何帮助。
门卫:
| <b>tree == Empty</b> = False
永远不会是真的,因为在你的条款的开头:
isLeaf node tree@(<b>Node el left right</b>)
你说这是Node
,不是Empty
。这也是您没有涵盖的情况:如果您传递 Empty
(并且由于递归最终您可以传递 Empty
),则没有模式匹配。
话虽这么说,我认为你把这件事想得太复杂了。你可以这样写:
isLeaf :: Eq a => a -> BTree a -> Bool
isLeaf _ Empty = False
isLeaf x (Node x' Empty Empty) = x == x'
isLeaf x (Node _ l r) = isLeaf x l || isLeaf x r
或带有 where
子句:
isLeaf :: Eq a => a -> BTree a -> Bool
isLeaf x = go
where go Empty = False
go (Node x' Empty Empty) = x == x'
go (Node _ l r) = go l || go r