当前位置: 首页 > 知识库问答 >
问题:

在Haskell中查找二叉树的高度

范成周
2023-03-14

我有下面的“height”函数,它返回树的高度。然而,当我尝试使用它时,我得到了这个异常。我怎样才能修好它?我还有一个函数“isBalancedTree”,它检查给定的树是否平衡。

data Tree = Node Tree Int Tree | Leaf Int deriving Show

height :: Tree -> Integer
height (Node left x right) = 1 + max (height left) (height right)

isBalancedTree :: Tree -> Bool
isBalancedTree (Node left x right) = 
    let diff = abs (height left - height right) in
    diff <= 1 && isBalancedTree left && isBalancedTree right

*主要

***异常:函数高度中的非穷尽模式

共有1个答案

佟和平
2023-03-14

height的递归实现很好,但是您忘记了单个叶的基本情况:

height (Leaf _) = 1

这是异常所抱怨的缺失模式。这同样适用于您的第二个函数isBalanced-您也需要一个叶的案例:

isBalanced (Leaf _) = True -- assuming a single-leaf tree is trivially balanced

 类似资料:
  • 主要内容:什么是二叉排序树?,使用二叉排序树查找关键字,二叉排序树中插入关键字,二叉排序树中删除关键字,总结前几节介绍的都是有关静态 查找表的相关知识,从本节开始介绍另外一种查找表—— 动态查找表。 动态查找表中做查找操作时,若查找成功可以对其进行删除;如果查找失败,即表中无该关键字,可以将该关键字插入到表中。 动态查找表的表示方式有多种,本节介绍一种使用树结构表示动态查找表的实现方法—— 二叉排序树(又称为 “二叉查找树”)。 什么是二叉排序树? 二叉排序树要么是空 二叉树,要么具有如下特点:

  • 我正在努力实现二叉搜索树。完成实现所需的功能之一是重新平衡功能。 根据规范,该功能的工作方式如下: rebalance() 方法应创建一个平衡树,从而将偏度降低为零。平衡树是指在整个树中,左子树和右子树的大小相差不超过1(即,每个子树也是平衡的)。 为了平衡树,rebalance() 方法应反复将根值移动到较小的子树,并将最小/最大值从较大的子树移动到根,直到树平衡。然后,它应该以递归方式平衡两个

  • 我刚刚开始学习Haskell,我正在尝试编写一个代码来搜索二叉树中的特定值,如果当前返回true,否则返回false这就是我的树结构的样子 我不确定如何继续遍历树并返回值的函数。我确实尝试了BFS和DFS,但我不确定一旦得到值后如何返回。 我的函数应该是什么样子的一个例子

  • 我们已经看到了两种不同的方法来获取集合中的键值对。回想一下,这些集合实现了 map 抽象数据类型。我们讨论的 map ADT 的两个实现是在列表和哈希表上的二分搜索。在本节中,我们将研究二叉查找树作为从键映射到值的另一种方法。 在这种情况下,我们对树中项的确切位置不感兴趣,但我们有兴趣使用二叉树结构来提供高效的搜索。

  • 我正在尝试使用Prolog实现它以在二叉树中查找元素。 因为我认为< code>elem1检查我的树的根是否是我搜索的一个元素,并且它处理这个输出。 但是以这样的递归方式: 似乎调用正确的方式(10)并检查正确的谓词,但之后尝试扩展更多并给我一个失败。 我不知道为什么会发生这种情况,但基本情况很好,所以我认为当找到一个元素时,退出并给出true,因为基本谓词是有效的。

  • 我正在准备考试的作业之一让我创造了 然后它要求制作