【问题标题】:With ' N ' no of nodes, how many different Binary and Binary Search Trees possible?使用“N”个节点,可能有多少种不同的二叉搜索树和二叉搜索树?
【发布时间】:2010-06-15 03:51:08
【问题描述】:

对于二叉树:无需考虑树节点值,我只对具有“N”个节点的不同树拓扑感兴趣。

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

【问题讨论】:

    标签: tree binary-tree catalan


    【解决方案1】:
    1. 二叉树总数 =

    2. 对 i 求和得出具有 n 个节点的二叉搜索树的总数。

    基本情况是 t(0) = 1 和 t(1) = 1,即有一个空的 BST 和一个有一个节点的 BST。

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

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

    【讨论】:

    • 请注意,1 和 2 实际上是表示同一公式的不同方式,而不是不同数量的公式,以防不清楚。
    • @Black_Rider - 我尝试了上面的公式来计算编号。 100 个唯一节点的可能树。但它失败了。我用DP解决了这个问题。您可以找到代码here。答案是错误的。预期的答案是 25666077,但实际输出是 7159379471982673992。你能帮我解决这个问题吗?
    • 如果一些树有相同的键怎么办?例如对于树 1、1、2、2,不可能将相似的键压缩到一个顶点
    【解决方案2】:

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

    二叉搜索树的数量可以看作是一种递归解决方案。 即二叉搜索树的数量=(Left二叉搜索子树的数量)*(Right二叉搜索子树的数量)*(选择根的方式)

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

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

    1. 选择1作为根,no元素可以插入左侧子树。 n-1 个元素将被插入到右侧子树中。
    2. 选择2作为根,1元素可以插入左侧子树。 n-2 个元素可以插入到右子树中。
    3. 选择3作为根,2元素可以插入左侧子树。 n-3 个元素可以插入到右子树中。

    ……同理,以i-th元素为根,i-1元素可以在左边和ni em> 在右边。

    这些子树本身就是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。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 此处提供的解决方案cslibrary.stanford.edu/110/BinaryTrees.html # 12 与按加泰罗尼亚数计算提供的解决方案不匹配。也就是说 countTrees(4) 应该是 5 而不是 14,对吧?但它返回 14。(这是系列 1、1、2、5、14、42、132)
      • countTrees(4) 是系列中的第 5 个元素,因为系列从 0 开始,这就是它返回的内容:14
      • 我会推荐印度理工学院 Ropar youtube.com/watch?v=BLG9E_PoXXc&feature=emb_logo 的加泰罗尼亚数字图形教程。
      【解决方案4】:

      如果没有。节点数为 N 则。

      不同的BST编号=加泰罗尼亚语(N)
      结构不同的二叉树的不同编号为 = Catalan(N)

      不同的二叉树数为=N!*Catalan(N)

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

        • 第 n 个加泰罗尼亚数公式 (2n)! / (n+1)!n! 呈指数增长。我们如何为n > 11 编写算法来解决这个问题?
        【解决方案6】:

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

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

        其中 C=combination 例如。

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

        【讨论】:

          【解决方案7】:
          (2n)!/n!*(n+1)!
          

          【讨论】:

            【解决方案8】:
            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
            

            【讨论】:

              【解决方案9】:

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

              【讨论】:

              • 你能解释一下第一个公式中的2nCn和(n+1)吗?
              【解决方案10】:

              二叉树:

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

              由 (2 power n) - n 给出

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

              二叉搜索树:

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

              由 2n C n / n+1 给出

              【讨论】:

                【解决方案11】:
                • 具有 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.

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2023-03-08
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-03-22
                  • 1970-01-01
                  • 2011-09-16
                  相关资源
                  最近更新 更多