例如,对于N = 3,我们可以通过列出所有内容轻松找到,但当被要求任意N值时,我面临问题。
答案 0 :(得分:2)
如果您正在查看二进制树,那么,正如mcdowella所说,选择(2n,n)/(n + 1)(加泰罗尼亚语数字)就是答案。
如果你正在寻找任意树,那么它可能是n。 n ^(n-2)= n ^(n-1),但我不完全确定。 Prufer's algo告诉我们有n ^(n-2)个标记的树,任何节点都可以成为根,因此我们得到数字n ^(n-1)。
答案 1 :(得分:0)
Knuth Vol 1(计算机程序设计:基础算法)一节2.3.4.4大约半页的数学给你选择(2n,n)/(n + 1)并搜索序列Knuth找到了http://oeis.org/A000108
答案 2 :(得分:0)
您可以使用动态编程来实现这一目标:
我们是树的fix element i as the root
。现在我们需要知道how many different trees
我们可以用the first (i-1) elements and the rest (n-i-1) elements
形成
因此,我们对这两个子数组(i-1)
和(n-i-1)
执行相同的过程以获得以下重复:
<强>公式:强>
<强>乳胶强>
树[N]&安培;空间; =&安培;空间; \ sum_ {I和空间; =&安培;空间; 2} ^ {I和空间; =&安培;空间; N-1}&安培;空间;树[I-1] *树[NI-1]
答案 3 :(得分:0)
二叉树(2n,n)/(n + 1)(加泰罗尼亚语号)作为答案 如果标记树比n ^(n-2)树。