在 SML 中查找 2-3 树中的节点数
Posted
技术标签:
【中文标题】在 SML 中查找 2-3 树中的节点数【英文标题】:Finding the number of nodes in a 2-3 tree in SML 【发布时间】:2015-01-03 10:32:22 【问题描述】:我的期中考试快到了,所以我正在处理练习题。我不知道如何开始这个。
2-3 树是一棵树,其中每个非叶节点可能有两个或三个子节点,并且所有 节点的子树具有相同的高度。如果我们忽略子树高度的条件,我们可以定义如下 SML 类型:
数据类型'a twoThreeTree = |空
| 'a * 'a twoThreeTree * 'a twoThreeTree 的二进制
| 'a * 'a twoThreeTree * 'a twoThreeTree * 'a twoThreeTree的三元组;
一个。 编写一个递归函数 N,计算 2-3 树中的节点数。
b. 编写一个递归函数 ht 计算 2-3 树的高度。 (类比二叉树,让空树的高度为-1。
如果有的话,我只需要 a 部分的帮助。我想我可以用我从 a) 中学到的东西来做 b)。
【问题讨论】:
【参考方案1】:这应该有助于 (a)。
fun N(Empty) = 0
| N(Binary(_,x,y)) = 1 + (N(x)) + (N(y))
| N(Ternary(_,x,y,z)) = 1 + (N(x)) + (N(y)) + (N(z))
我们假设 Empty 的节点数为 0,对于其他每种类型的节点,我们计算节点本身和其他节点的数量。
对于 b,而不是把东西加在一起。想想你如何定义以下树的高度
NODE
/ \
LEFT_TREE RIGHT_TREE
如果LEFT_TREE
的高度为H_left
,而RIGHT_TREE
的高度为H_right
。你能将整棵树的高度表示为H_left
和H_right
的函数吗?如果这棵树有三个孩子呢?
fun ht(Empty) = -1
| ht(Binary(_,x,y)) = ...
| ht(Ternary(_,x,y,z)) = ...
【讨论】:
以上是关于在 SML 中查找 2-3 树中的节点数的主要内容,如果未能解决你的问题,请参考以下文章