在 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_leftH_right 的函数吗?如果这棵树有三个孩子呢?

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

【讨论】:

以上是关于在 SML 中查找 2-3 树中的节点数的主要内容,如果未能解决你的问题,请参考以下文章

VLFeat 分层 k-means:词汇树中的节点数

BST 中的节点数

在二叉树中,对于每个节点,左右节点数之差

在Java中计算树中的节点

二叉树中的权值是啥?

二叉树中的权值是啥?