对于二叉树:无需考虑树节点值,我只对具有“ N”个节点的不同树拓扑感兴趣。
对于二叉搜索树:我们必须考虑树节点值。
Answers:
我推荐我的同事尼克·帕兰特(Nick Parlante)的这篇文章(从他还是斯坦福大学的那一刻起)。结构上不同的二叉树的数量(问题12)具有一个简单的递归解决方案(封闭形式最终是加泰罗尼亚公式,@ codeka的答案已经提到)。
我不确定结构上不同的二叉搜索树(简称BST)的数量与“普通”二叉树的数量有什么不同-除非,如果通过“考虑树节点值”表示每个节点可能任何与BST条件兼容的数字,那么不同(但并非所有结构不同的BST)的数目是无限的。我怀疑你的意思是,所以,请说明你做的平均值,其具有一个例子!
二进制搜索树的数量可以看作是递归的解决方案。即,二分搜索树的数量=(左二分搜索子树的数量)*(右二分搜索子树的数量)*(选择根的方式)
在BST中,只有元素之间的相对顺序很重要。因此,在不损失一般性的情况下,我们可以假设树中的不同元素为1,2,3,4,....,n。另外,让BST的数量由n个元素的f(n)表示。
现在我们有多种选择根的情况。
......类似地,对于第i个元素作为根,i-1个元素可以在左侧,ni可以在右侧。
这些子树本身就是BST,因此,我们可以将公式总结为:
f(n)= f(0)f(n-1)+ f(1)f(n-2)+ .......... + f(n-1)f(0)
基本情况下,f(0)= 1,这是因为只有一种方法可以制作具有0个节点的BST。f(1)= 1,因为只有一种方法可以制作1个节点的BST。
二叉树:
无需考虑价值,我们需要看一下结构。
由(2次幂n)-n
例如:对于三个节点,它是(2次幂3)-3 = 8-3 = 5个不同的结构
二进制搜索树:
我们甚至需要考虑节点值。我们称其为加泰罗尼亚语编号
由2n C n / n + 1给出