Haskell二叉树相等函数实现作业:补全equal函数代码
补全Haskell二叉树相等函数
equal的实现 没问题,我来帮你补全这个检查二叉树是否完全相同的equal函数!咱们结合给定的函数框架,一步步填充每个模式匹配的逻辑:
完整实现代码
data Tree a = Leaf a | Node a (Tree a) (Tree a) | Null equal :: Eq a => Tree a -> Tree a -> Bool equal Null Null = True equal (Leaf a) (Leaf b) = a == b equal (Node a1 left1 right1) (Node a2 left2 right2) = a1 == a2 && equal left1 left2 && equal right1 right2 equal _ _ = False
逐行解释逻辑
equal Null Null = True:两个空树显然是完全相同的,直接返回True。equal (Leaf a) (Leaf b) = a == b:当两个树都是叶子节点时,只要叶子中存储的值相等,这两棵树就相等。这里的模式匹配会精准匹配两个Leaf构造器的情况。equal (Node a1 left1 right1) (Node a2 left2 right2) = a1 == a2 && equal left1 left2 && equal right1 right2:对于两个内部节点,需要同时满足三个条件才相等:- 当前节点存储的值
a1和a2相等; - 左子树
left1和left2完全相同(递归调用equal检查); - 右子树
right1和right2完全相同(同样递归调用equal检查)。
- 当前节点存储的值
equal _ _ = False:剩下的所有不匹配情况(比如一个是Null另一个是Leaf,或者一个是Leaf另一个是Node),都说明两棵树结构或值不同,直接返回False。
这个实现覆盖了所有可能的二叉树组合情况,利用Haskell的模式匹配特性,逻辑清晰且符合递归数据结构的处理思路。
内容的提问来源于stack exchange,提问作者Residenttt
相关产品推荐
相关产品推荐

