不同类型二叉搜索树的节点公式

时间:2014-12-11 20:58:33

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

我试图找到树中定义如下的最大节点数:

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

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

如何以外行人的方式处理这个问题? (我并不是非常肮脏。)

1 个答案:

答案 0 :(得分:2)

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

我们可以分别考虑左右树,因为它们不会影响彼此的高度。忽略根,让我们调用根 L 的左子树,并让他们调用根 R 的右子树。 L 保持 L 中的每个节点不能超过 l 子节点的不变量。同样, R 中的每个节点都不能包含 r 子节点。

让我们构建两个函数 b c ,它们取高度 h 并输出<的最大节点数em> 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 的封闭表单。让我们首先找到 b c 的封闭表单。

给定正高度 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 &GT; 1,找到你定义的二叉搜索树的最大节点数的公式是

l^(h - 1) + r^(h - 1)
相关问题