【问题标题】:Node formula of a different kind of binary search tree另一种二叉搜索树的节点公式
【发布时间】:2014-12-12 05:34:51
【问题描述】:

我正在尝试查找定义如下的树中的最大节点数:

根最多可以有 2 个孩子。 左边的每个子树最多可以有 L 个孩子。 右边的每个子树最多可以有 R 个子树。

我知道在二叉树中查找节点数的公式是 2^h-1,其中 h 是树中的层数。

用外行的话来说,这将如何处理? (我不是很数学。)

【问题讨论】:

    标签: c++ tree binary-tree binary-search-tree


    【解决方案1】:

    所以更正式地说,你试图找到二叉搜索树中的节点数,使得树的根有两个孩子,左边的每个子树最多有 l 个孩子,右边的每个子树都有r 孩子。

    我们可以分别考虑左右树,因为它们不会影响彼此的高度。不考虑根,我们将根的左子树称为L,将根的右子树称为RL 持有 L 中的每个节点不能有超过 l 个子节点的不变量。类似地,R 中的每个节点不能有超过 r 个子节点。

    让我们构造两个函数,bc,它们取高度h并输出L 或 R 分别。

    b(h) = if h = 1 then 1 else l * b(h - 1)
    c(h) = if h = 1 then 1 else r * b(h - 1)
    

    现在,我们可以构造函数 a,它采用高度 h 并输出您定义的树的最大节点。

    a(h) = if h = 1 then 1 else (b(h - 1) + c(h - 1))
    

    现在,我们要为 a 找到一个封闭的形式。让我们从寻找 bc 的封闭形式开始。

    给定正高度h,因为除了第一种情况,l 被重复相乘,

    b(h) = l^(h - 1)
    c(h) = r^(h - 1)
    a(h) = if h = 1 then 1 else (l^(h - 1) + r^(h - 1))
    

    我不确定您是否还想在 a 的封闭形式中考虑 h = 1,但给定 h > 1 ,求你定义的二叉搜索树的最大节点数的公式是

    l^(h - 1) + r^(h - 1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多