在sml中找到一棵树的高度

时间:2011-02-21 19:36:52

标签: sml

我想在sml中找到树的高度。树不是常规的,它可以在一个级别上有任意数量的节点。它所拥有的数据类型也是抽象的。有人帮我解决它

1 个答案:

答案 0 :(得分:3)

正如其他人所说,那么请发布你所拥有的树的定义,以及到目前为止你提出的代码。

我假设您已经定义了自己的树结构,或者已经在赋值中定义了它,无论如何这不应该是您的问题所以这里是使用Node和空{的简单二叉树结构{1}}作为构造函数。

Leaf

datatype 'a tree = Leaf | Node of ('a tree) * 'a * ('a tree) val t1 = Node (Leaf, 1, Leaf) val t2 = Node (t1, 2, Leaf) val t3 = Node (Leaf, 3, Leaf) val t = Node (t2, 4, t3)

的Ascii表示
t

给定二叉树的这种表示,您可以创建一个以自下而上的方式计算高度的函数。你主要要考虑两种情况:

  1. 只有一片叶子的树的高度是多少?
  2. 具有高度为l的左子树和高度为r的右子树的节点的高度是多少?
  3. 如果我们从上面的示例中查看 4 / \ / \ 2 3 / \ / \ 1 * * * / \ * * Where * represents the leafs

    t2

    然后显然右侧子树的高度为x(取决于您如何定义叶子的高度),左侧子树的高度为0. 2 / \ 1 * / \ * * 的高度必须为1(0 + 1) )。

    考虑t2,它有一个高度为1的左子树(正如我们刚刚发现的那样),而右子树的高度为0.因此t的高度必须为2(1 1)

    我已经看到很多快速实现高度函数来计算根节点,但这不正确。

    Here

      

    高度定义为从根到最深叶子的链接数