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