可以形成多少种不同的二元树,高度为h?

时间:2016-02-20 03:36:58

标签: algorithm tree

可以形成多少种不同的二元树,高度为h?如果我们只知道二叉树的高度,并且我们将root-left和root-right视为相同的树结构,这意味着如果二叉树的高度等于1,我们可以形成2个不同的树结构: root - leftchild / rightchild; root - leftchild - rightchild

1 个答案:

答案 0 :(得分:0)

我们有S [h]方法来构建一个高度为h的树((h)-tree )。
我们可以从根节点和来自:组成(h-tree) - 左(h-1)-tree和任何高度为0..h-2的右树 - 两个(h-1)树 - 右(h-1)-tree和任何高度为0..h-2

的左树

所以递归公式是

 S[h] = S[h-1] * Sum{k=0..h-2} (S[k]) + 
        S[h-1] * S[h-1] + 
        S[h-1] * Sum{k=0..h-2} (S[k]) = 
        S[h-1] * (S[h-1]  + 2 * Sum{k=0..h-2} (S[k]))

现在使用S[0] = 1, S[1] = 1,我们可以通过递归找到所有值。

示例:S[3] = S[2] * (S[2] + 2*(S[0] + S[1])) = 3 * (3 + 2 * (1 + 1)) = 21

请注意,将一次又一次地计算相同的值,因此值得使用动态编程:
- 或自上而下memoization - 当我们将一次计算值S [k]写入表并稍后使用时,它是递归的非常简单的修改
- 或自下而上的方法 - 在这里我们可以使用附加表和累积总和。

要检查:S[5] = 457653