我有一个期中考试,所以我正在研究练习题。我不知道如何开始这个。
2-3树是一棵树,其中每个非叶节点可以有两个或三个子节点 节点的子树具有相同的高度。如果我们忽略子树高度的条件,我们可以进行以下SML类型定义:
数据类型'a twoThreeTree = |空
| 'a *'的二进制'三个树'*一个2ThreeTree
|三个'a *'一个两个三树*'一个两个三树''一个两个三树;
一个。 编写递归函数N,计算2-3树中的节点数。
湾 编写递归函数ht,计算2-3树的高度。 (与二叉树类似,使空树的高度为-1。
如果有的话,帮助部分a将是我所需要的。我想我可以用我从a)学到的东西来做b)。
答案 0 :(得分:0)
这应该有助于(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)) = ...