使用“ N”个节点,可能有多少个不同的二叉树和二叉树?


75

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

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

Answers:


41

我推荐我的同事尼克·帕兰特(Nick Parlante)的这篇文章(从他还是斯坦福大学的那一刻起)。结构上不同的二叉树的数量(问题12)具有一个简单的递归解决方案(封闭形式最终是加泰罗尼亚公式,@ codeka的答案已经提到)。

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


1
这里提供的解决方案cslibrary.stanford.edu/110/BinaryTrees.html#12与加泰罗尼亚语数字计算得出的解决方案不匹配。也就是说countTrees(4)应该是5而不是14,对吗?但是它返回14。(这是系列1、1、2、5、14、42、132)
乔伊斯(Joyce

1
countTrees(4)是系列中的第5个元素,因为该系列从0开始,这就是它返回的内容:14
Erric

我会推荐印度技术学院Ropar youtube.com/watch?v=BLG9E_PoXXc&feature=emb_logo编写的有关加泰罗尼亚数字的图形教程。
angshuk nag

79
  1. 二叉树总数为= 输入图像描述![在此处输入图像描述

  2. 对i求和得出具有n个节点的二叉搜索树的总数。 在此处输入图片说明

基本情况是t(0)= 1和t(1)= 1,即有一个空的BST和一个节点的BST。 在此处输入图片说明

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

我想我给了你一些主意...


6
请注意,如果不清楚,则1和2实际上是表示同一公式的不同方式,不是表示不同数量的公式的方式。
托德·奥布莱恩

1
@Black_Rider-我尝试了上面的公式来计算否。100个唯一节点的可能树的数量。但这是失败的。我用DP解决了这个问题。您可以在此处找到代码。答案是错误的。预期答案为25666077,但实际输出为7159379471982673992。您能帮我这个忙吗?
丹妮2015年

如果某些树具有相同的密钥怎么办?例如,对于树1、1、2、2,无法将相似的关键点压缩到一个顶点
Evgeny

38

可以使用加泰罗尼亚数来计算二叉树的数量

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

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

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

  1. 选择1作为根,则不能在左侧子树上插入任何元素。n-1个元素将插入到右侧子树中。
  2. 选择2作为根,可以在左侧子树中插入1个元素。可以在右侧子树上插入n-2个元素。
  3. 选择3作为根,可以在左侧子树中插入2个元素。可以在右侧子树上插入n-3个元素。

......类似地,对于第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。

最终配方


13

如果没有。的节点数为N然后。

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

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



5

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

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

其中C =组合,例如。

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


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

1

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


-1

二叉树:

无需考虑价值,我们需要看一下结构。

由(2次幂n)-n

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

二进制搜索树:

我们甚至需要考虑节点值。我们称其为加泰罗尼亚语编号

由2n C n / n + 1给出

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.