在SML中查找2-3树中的节点数

时间:2014-11-06 19:14:27

标签: tree sml treenode

我有一个期中考试,所以我正在研究练习题。我不知道如何开始这个。

2-3树是一棵树,其中每个非叶节点可以有两个或三个子节点 节点的子树具有相同的高度。如果我们忽略子树高度的条件,我们可以进行以下SML类型定义:

数据类型'a twoThreeTree = |空

| 'a *'的二进制'三个树'*一个2ThreeTree

|三个'a *'一个两个三树*'一个两个三树''一个两个三树;

一个。 编写递归函数N,计算2-3树中的节点数。

湾 编写递归函数ht,计算2-3树的高度。 (与二叉树类似,使空树的高度为-1。

如果有的话,帮助部分a将是我所需要的。我想我可以用我从a)学到的东西来做b)。

1 个答案:

答案 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_leftRIGHT_TREE的身高H_right。你能否将整棵树的高度表示为H_leftH_right的函数?如果这棵树有三个孩子会怎么样?

fun ht(Empty)            = -1
  | ht(Binary(_,x,y))    = ...
  | ht(Ternary(_,x,y,z)) = ...