生成所有n叶任意树

时间:2014-04-07 18:46:52

标签: python tree binary-tree

我需要为给定数量的叶节点生成所有可能的任意树拓扑,其限制是每个非叶非根节点必须具有兄弟节点(以防止无限递归)。特别是,我正在寻找一种干净的Pythonic方式(虽然欢迎任何和所有建议)。

因此,例如,对于n = 3,我正在寻找以下输出:

  
      
  • (1 2 3)
  •   
  • ((1)2 3)
  •   
  • (1(2)3)
  •   
  • (1 2(3))
  •   
  • ((1)(2)3)
  •   
  • ((1)2(3))
  •   
  • (1(2)(3))
  •   
  • ((1)(2)(3))
  •   
  • ((1 2)3)
  •   
  • (((1)2)3)
  •   
  • ...
  •   

特别地,(1)是n = 1的有效树,但是((1))不是,因为它包括没有兄弟的内部节点。这使得可能的树集保持有限。

(我对排序不可知:解决方案可能将(1 2)和(2 1)视为相同或不同。也就是说,我最终需要它们是截然不同的,但这可以很容易地在一秒钟内完成步骤。)

相关背景

在二叉树和任意树之间定义了同态,使得具有k个节点的二元树与具有k + 1个节点的任意树一样多。见Eric Lippert's excellent explanation。 Lippert提供了一种为给定数量的节点生成所有任意树的简单方法,但我正在寻找具有给定数量的和可变数量的所有任意树。节点

在Python中有一个prior question枚举n-leaf二叉树。但是相应的任意树将少于n个叶子:我对叶子节点的约束是在任意树上,而不是在它的二进制表示上。

将任意树转换为二叉树时,任意树中的叶子对应于二叉树中没有左子节点的节点。因此,似乎解决方案可能从一组叶节点(定义为仅具有右分支)和内部节点(至少需要左分支)开始并枚举可能的组合。然而,我无法完全看到完全解决方案。

0 个答案:

没有答案