查找二叉搜索树的高度

时间:2012-03-08 06:17:34

标签: haskell binary-tree

我很难习惯Haskell中的递归,无论如何有人可以向我解释我将如何解决这个问题。 我看了很多其他帖子,但我无法弄明白该怎么做。

我的类型为

data BST = MakeNode BST String BST
             | Empty              

我不确定如何检查树下每一条路径的组合。

2 个答案:

答案 0 :(得分:9)

考虑大多数递归函数的技巧很简单:首先考虑基本情况,然后考虑递归情况。

基本情况通常是微不足道的 - 你什么时候知道树的高度而没有任何额外的计算?当然没有孩子的时候!所以基本情况是:

height Empty = 0

这非常简单。现在接下来的问题是:带子元素的二叉树的高度是多少?

嗯,这也很简单 - 它是1,对于当前节点,加上最高子树的高度。所以:

height MakeNode left _ right = 1 + max (height left) (height right)

_只表示我们不关心节点中的字符串。)

所以我们有一个非常简单的功能:

height :: BST -> Int
height Empty              = 0
height (BST left _ right) = 1 + max (height left) (height right)

我希望这能澄清设计递归函数的思维过程。

答案 1 :(得分:1)

该类型的任何树都将具有无限高度,因为无法表示叶子。

如果类型定义为:

data BST = MakeNode BST String BST
         | MakeLeaf

然后叶子的高度为0,节点的高度为1加上其两个子树的最大高度。