查找二叉搜索树的高度

use*_*349 1 binary-tree haskell

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

我有我的类型

data BST = MakeNode BST String BST
             | Empty              
Run Code Online (Sandbox Code Playgroud)

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

Tik*_*vis 9

思考大多数递归函数的诀窍很简单:首先考虑基本情况,然后考虑递归情况.

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

height Empty = 0
Run Code Online (Sandbox Code Playgroud)

这非常简单.现在,下一个问题:什么是二叉树的高度孩子吗?

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

height MakeNode left _ right = 1 + max (height left) (height right)
Run Code Online (Sandbox Code Playgroud)

(这_意味着我们不关心节点中的字符串.)

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

height :: BST -> Int
height Empty              = 0
height (BST left _ right) = 1 + max (height left) (height right)
Run Code Online (Sandbox Code Playgroud)

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

  • @ user1204349:如果您有不相关的问题,则应单独发布,而不是在评论中发布.你会更快地得到更好的答案. (2认同)