使用“N”个节点,可以使用多少个不同的二进制和二进制搜索树?

时间:2010-06-15 03:51:08

标签: tree binary-tree catalan

对于二叉树:没有必要考虑树节点值,我只对具有'N'节点的不同树拓扑感兴趣。

对于二进制搜索树:我们必须考虑树节点值。

11 个答案:

答案 0 :(得分:70)

  1. 二元树的总数= enter image description![enter image description here

  2. 总结i给出了具有n个节点的二叉搜索树的总数。 enter image description here

  3. 基本情况是t(0)= 1且t(1)= 1,即存在一个空BST并且存在一个具有一个节点的BST。 enter image description here

    因此,通常您可以使用上面的公式计算二进制搜索树的总数。 我在有关此公式的 Google 采访中被问到一个问题。 问题是6个顶点可能有多少二元搜索树。 所以答案是t(6)= 132

    我想我给了你一些想法......

答案 1 :(得分:38)

我的同事Nick Parlante推荐this article(当他还在斯坦福时回来)。结构上不同的二叉树的数量(问题12)有一个简单的递归解决方案(以封闭的形式最终成为加泰罗尼亚公式,@ codeka的答案已经提到过)。

我不确定结构上不同的二元搜索树(简称BST)的数量与“普通”二叉树的数量有何不同 - 除非是“考虑树节点”值“你的意思是每个节点可能是例如任何与BST条件兼容的数字,那么不同(但不是所有结构不同! - )BST的数量是无限的。我怀疑你的意思,所以,请用一个例子澄清你做什么的意思!

答案 2 :(得分:29)

可以使用catalan number计算二叉树的数量。

二进制搜索树的数量可以看作递归解决方案。 即,二进制搜索树的数量=(二进制搜索子树的数量)*(二进制搜索子树的数量)*(选择根的方式) )

在BST中,只有元素之间的相对排序很重要。因此,在不失一般性的情况下,我们可以假设树中的不同元素是 1,2,3,4,....,n 。另外,让BST的数量由 f(n)表示为n个元素

现在我们有多种情况来选择根。

  1. 选择1作为root, no 元素可以插入左子树中。 n-1 元素将插入右侧子树。
  2. 选择2作为root, 1 元素可以插入左子树。 n-2 元素可以插入到右子树中。
  3. 选择3作为root, 2 元素可以插入左侧子树。 n-3 元素可以插入到右侧子树中。
  4. ......同样,对于 i-th 元素作为根, i-1 元素可以在左边, ni 在右边。

    这些子树本身就是BST,因此,我们可以将公式概括为:

    f(n)= f(0)f(n-1)+ f(1)f(n-2)+ .......... + f(n -1)F(0)

    基础案例, f(0)= 1,因为正好有1种方法可以生成具有0个节点的BST。 f(1)= 1,因为只有1种方法可以生成具有1个节点的BST。

    Final Formula

答案 3 :(得分:10)

Eric Lippert最近发布了一系列非常深入的博客文章:“Every Binary Tree There Is”和“Every Tree There Is”(之后加上更多)。

在回答您的具体问题时,他说:

  

具有n个节点的二叉树的数量由Catalan numbers给出,其具有许多有趣的属性。第n个加泰罗尼亚数由公式(2n)确定! /(n + 1)!n !,它呈指数增长。

答案 4 :(得分:10)

如果没有。节点是N然后。

不同数量的BST =加泰罗尼亚语(N)
不同数量的结构上不同的二元树是=加泰罗尼亚语(N)

不同数量的二叉树是= N!*加泰罗尼亚语(N)

答案 5 :(得分:5)

具有n个节点的不同二叉树:

(1/(n+1))*(2nCn)

其中C =组合,例如

n=6,
possible binary trees=(1/7)*(12C6)=132

答案 6 :(得分:4)

(2n)!/n!*(n+1)!

答案 7 :(得分:1)

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

答案 8 :(得分:0)

  • 具有 n 个不同键的可能二叉搜索树的总数 = 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.```
    
    
  • 以及具有 n 个不同键的可能二叉树的总数 = (2nCn / (n + 1)) * n!

    For n = 4 --> 336 Binary Search Trees are possible.

答案 9 :(得分:-1)

二叉树:

无需考虑值,我们需要查看结构。

由(2次幂n) - n

给出

例如:对于三个节点,它是(2次幂3)-3 = 8-3 = 5种不同的结构

二分查找树:

我们甚至需要考虑节点值。我们称之为加泰罗尼亚数字

由2n C n / n + 1给出

答案 10 :(得分:-1)

对于未标记的节点,正确答案应该为 2nCn /(n + 1),如果节点被标记,则(2nCn)* n!/(n + 1) >。