对于二叉树:不需要考虑树节点的值,我只关注拥有 'N' 个节点的不同树形结构。
对于二叉搜索树:我们必须考虑树节点的值。
对于二叉树:不需要考虑树节点的值,我只关注拥有 'N' 个节点的不同树形结构。
对于二叉搜索树:我们必须考虑树节点的值。
二叉树的总数为=
对 i 求和可得 n 个节点的二叉搜索树的总数。
基本情况是 t(0) = 1 和 t(1) = 1,即有一个空的 BST 和一个带有一个节点的 BST。
因此,一般来说,您可以使用上述公式计算二叉搜索树的总数。我在谷歌面试中被问到了与该公式相关的问题。问题是有多少个具有 6 个顶点的二叉搜索树。 回答是 t(6) = 132。
我想我给了你一些想法...
...... 同理,对于第i个元素作为根节点,左子树可以插入i-1个元素,右子树可以插入n-i个元素。
这些子树本身就是BST,因此我们可以总结出公式:
f(n) = f(0)f(n-1) + f(1)f(n-2) + .......... + f(n-1)f(0)
基本情况, f(0) = 1,因为用0个节点构建一棵BST有且仅有1种方法。 f(1) = 1,因为用1个节点构建一棵BST有且仅有1种方法。
我推荐我的同事Nick Parlante(他之前在斯坦福大学)的这篇文章。其中,问题12中二叉树结构不同的计数有一个简单的递归解决方案(闭式形式最终会成为卡特兰公式,正如@codeka的答案中已经提到的那样)。
我不确定结构不同的二叉搜索树(BSTs缩写)的数量与“普通”二叉树有什么不同 - 除非您通过“考虑树节点值”指的是每个节点可能是任何与BST条件兼容的数字,那么不同的(但不是所有结构不同!)BSTs的数量是无限的。我认为您不是这个意思,请举一个例子澄清一下!
Eric Lippert最近在他的博客上发布了一系列非常深入的文章:"Every Binary Tree There Is"和"Every Tree There Is"(以及之后的一些文章)。
针对你特定的问题,他说:
n个节点的二叉树数量由Catalan数给出,它们有许多有趣的性质。第n个Catalan数的确定公式为(2n)! / (n+1)!n!,而这个公式是呈指数级增长的。
(2n)! / (n+1)!n!
呈指数增长。我们如何编写一个算法来解决n > 11
的情况? - GigaWatts具有n个节点的不同二叉树:
(1/(n+1))*(2nCn)
其中C表示组合,例如:
n=6,
possible binary trees=(1/7)*(12C6)=132
(2n)!/n!*(n+1)!
Total number of possible Binary Search Trees with n different keys = 2nCn / (n + 1)
For n = 1 --> 1 Binary Search Tree is possible.
For n = 2 --> 2 Binary Search Trees are possible.
For n = 3 --> 5 Binary Search Trees are possible.
For n = 4 --> 14 Binary Search Trees are possible.
For n = 5 --> 42 Binary Search Trees are possible.
For n = 6 --> 132 Binary Search Trees are possible.```
And Total number of possible Binary Trees with n different keys = (2nCn / (n + 1)) * n!
For n = 4 --> 336 Binary Search Trees are possible.
The number of possible binary search tree with n nodes (elements,items) is
=(2n C n) / (n+1) = ( factorial (2n) / factorial (n) * factorial (2n - n) ) / ( n + 1 )
where 'n' is number of nodes (elements,items )
Example :
for
n=1 BST=1,
n=2 BST 2,
n=3 BST=5,
n=4 BST=14 etc