【问题标题】:Finding the number of nodes in a 2-3 tree in SML在 SML 中查找 2-3 树中的节点数
【发布时间】: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)。

【问题讨论】:

    标签: tree sml treenode


    【解决方案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)) = ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-28
      • 1970-01-01
      • 2023-04-10
      • 2020-07-09
      相关资源
      最近更新 更多