如何检查节点是否是二叉树中的叶子 (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