所以本质上我想从一个节点开始,它必须大于左子树但小于右子树......等等。在我的工作表上,它说将其分成两个功能以使其更容易。使用“也许是”。(它无法将类型“也许 a”匹配到“a”,这完全阻止了我。
这就是我所拥有的,我看到了一个类似的问题,但无法真正理解它。提前致谢。
is_valid_binary_search_tree :: Ord a => BSTree a -> Bool
is_valid_binary_search_tree tree = case tree of
Null -> True
Node element t1 t2
| element > get_element t1 -> is_valid_binary_search_tree t1
| element < get_element t2 -> is_valid_binary_search_tree t2
| otherwise -> False
get_element :: BSTree a -> Maybe a
get_element tree = case tree of
Null -> Nothing
Node element t1 t2 -> Just element
如果我删除 Null -> Nothing,它可以编译,但会在 get_element 中显示详尽的模式。is_valid_binary_search_tree 也不会比较子树的右子树是否小于主节点。(这真的是我的大问题)