我试图找到树中定义如下的最大节点数:
根最多可以有2个孩子。 左边的每个子树最多可以有L个孩子。 右边的每个子树最多可以有R个孩子。
我知道在二叉树中查找节点数的公式是2 ^ h-1,其中h是树中的级别数。
如何以外行人的方式处理这个问题? (我并不是非常肮脏。)
答案 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)