我想在sml中找到树的高度。树不是常规的,它可以在一个级别上有任意数量的节点。它所拥有的数据类型也是抽象的。有人帮我解决它
答案 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)
t
给定二叉树的这种表示,您可以创建一个以自下而上的方式计算高度的函数。你主要要考虑两种情况:
如果我们从上面的示例中查看 4
/ \
/ \
2 3
/ \ / \
1 * * *
/ \
* *
Where * represents the leafs
t2
然后显然右侧子树的高度为x(取决于您如何定义叶子的高度),左侧子树的高度为0. 2
/ \
1 *
/ \
* *
的高度必须为1(0 + 1) )。
考虑t2
,它有一个高度为1的左子树(正如我们刚刚发现的那样),而右子树的高度为0.因此t
的高度必须为2(1 1)
我已经看到很多快速实现高度函数来计算根节点,但这不正确。
高度定义为从根到最深叶子的链接数