Tree 与';N';没有节点,可能有多少不同的二进制和二进制搜索树? < 2>强>二叉树:< /强>不需要考虑树节点值,我只对具有n个节点的不同树拓扑感兴趣。 二叉搜索树:我们必须考虑树节点值。 < P> Eric Lippert最近有一系列很深的博客文章关于这个:“和”(再加上一些之后)。

Tree 与';N';没有节点,可能有多少不同的二进制和二进制搜索树? < 2>强>二叉树:< /强>不需要考虑树节点值,我只对具有n个节点的不同树拓扑感兴趣。 二叉搜索树:我们必须考虑树节点值。 < P> Eric Lippert最近有一系列很深的博客文章关于这个:“和”(再加上一些之后)。,tree,binary-tree,catalan,Tree,Binary Tree,Catalan,在回答你的具体问题时,他说: 具有n个节点的二叉树的数目由给出,具有许多有趣的性质。第n个加泰罗尼亚数由公式(2n)!/(n+1)!N它呈指数增长 我的同事尼克·帕兰特(Nick Parlante,他还是斯坦福大学的时候)推荐我。结构不同的二叉树的计数(问题12)有一个简单的递归解决方案(封闭形式的结果是@codeka的答案已经提到的加泰罗尼亚公式) 我不确定结构上不同的二叉搜索树(简称BST)的数量与“普通”二叉树的数量会有什么不同——除了,如果“考虑树节点值”的意思是每个节点可能是与BST条

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


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

我的同事尼克·帕兰特(Nick Parlante,他还是斯坦福大学的时候)推荐我。结构不同的二叉树的计数(问题12)有一个简单的递归解决方案(封闭形式的结果是@codeka的答案已经提到的加泰罗尼亚公式)


我不确定结构上不同的二叉搜索树(简称BST)的数量与“普通”二叉树的数量会有什么不同——除了,如果“考虑树节点值”的意思是每个节点可能是与BST条件兼容的任何数字,那么不同的二叉搜索树(但不是所有结构上都不同!)BSTs是无限的。我怀疑你的意思,所以,请举例说明你的意思

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

(2n)!/n!*(n+1)!
(1/(n+1))*(2nCn)
式中C=组合,例如

n=6,
possible binary trees=(1/7)*(12C6)=132
  • 二叉树的总数=

  • 求和i给出了具有n个节点的二叉搜索树的总数。

  • 基本情况是t(0)=1和t(1)=1,即存在一个空BST,并且存在一个BST和一个节点。

    所以,一般来说,您可以使用上面的公式计算二叉搜索树的总数。 在谷歌采访中,我被问到一个关于这个公式的问题。 问题是有6个顶点的二叉搜索树的总数是多少。 所以答案是t(6)=132


    我想我给了你一些想法…

    二叉树的数量可以用

    二进制搜索树的数量可以看作是一个递归解决方案。 i、 例如,二叉搜索树的数量=(左二叉搜索子树的数量)*(右二叉搜索子树的数量)*(选择根的方法)

    在BST中,只有元素之间的相对顺序才重要。因此,在不损失一般性的情况下,我们可以假设树中的不同元素是1,2,3,4,…,n。同样,对于n个元素,让BST的数量用f(n)表示

    现在我们有了选择根的多种情况

  • 选择1作为根,左子树上不能插入任何元素。n-1个元素将插入到右子树上
  • 选择2作为根,可以在左子树上插入1个元素。n-2个元素可以插入到右子树上
  • 选择3作为根,可以在左子树上插入2个元素。n-3个元素可以插入到右子树上
  • 。。。。。。类似地,对于作为根的第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。 f(1)=1,因为只有一种方法可以使用1个节点生成BST


    如果给定的节点数为N,则

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

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

    二叉树:

    不需要考虑值,我们需要看结构。 由(2次幂n)-n给出

    对于三个节点,它是(2次方3)-3=8-3=5个不同的结构

    二叉搜索树:

    我们需要考虑节点值。我们称之为加泰罗尼亚号码


    由2n C n/n+1给出,对于未标记的节点,正确答案应为2nCn/(n+1),如果节点已标记,则(2nCn)*n/(n+1)

    • 具有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 = 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=4-->可以使用336个二进制搜索树。


    请注意,1和2实际上是表示相同公式的不同方式,而不是表示不同数量的公式,以防不清楚。@Black_Rider-我尝试了上述公式来计算100个唯一节点的可能树数。但它正在失败。我用DP来解决这个问题。你可以找到代码。答案是错误的。预期答案是25666077,但实际输出是7159379471982673992。你能帮我吗?如果有些树有相同的钥匙怎么办?例如,对于树1、1、2、2,不可能将类似的关键帧压缩到一个顶点。此处提供的解决方案#12与catalan数计算提供的解决方案不匹配。那就是countTrees(4)应该是5而不是14,对吗?但它返回14。(这是系列1、1、2、5、14、42、132)countTrees(4)是系列中的第五个元素,因为系列从0开始,这就是它返回的内容:14I建议印度理工学院Ropar提供这本关于加泰罗尼亚数字的图形教程。第n个加泰罗尼亚数字公式
    (2n)!/(n+1)!n呈指数增长。我们如何为
    n>11
    编写算法来解决这个问题?