【发布时间】:2015-11-18 07:08:33
【问题描述】:
将嵌套元组结构(即重组二叉树/二叉树)转换为的快速方法是什么
t = (4, (3, 5, (2, 4, 6, (1, 3, 5, 7))))
到(有序的)边元组
((4,3), (4,5), # step 1 edges
(3,2), (3,4), (5,4), (5,6), # step 2 edges
(2,1), (2,3), (4,3), (4,5), (6,5), (6,7)) # step 3 edges
每个节点都指向一对子节点,一个在父节点之下,一个在父节点之上。因此,4 导致 3 和 5; 3 导致 2 和 4;等等。
元组t表示如下二叉树结构
【问题讨论】:
-
Emm.. 您已经构建了一些奇怪的数据结构(正如您的另一个问题所述)并且想要提取其部分/边缘/砖块?你真正的问题是什么?
-
你对那个数据结构有什么发言权吗?它似乎包含 DAG 的行(列,在您提供的图像中),并且行自然地由像
list这样的序列表示...那么为什么它是嵌套的而不是顺序的?一系列行将是可迭代的,无需任何解包,并且作为奖励,您可以免费进行深度优先搜索:for row in rows: if target in row: do_something(target)。 -
方向不重要,但边缘很重要。我没有想到积木,但它可能是相关的 :) 这些树形转换是由对语言和结构效率(或限制)的探索驱动的。伟大的 cmets!
-
如果方向无关紧要,那些箭头代表什么?这肯定意味着他们是被指挥的。树是总是指向的 --- parent-of 和 child-of 是非常不同的关系。 (从技术上讲,如果一个顶点可以有多个传入箭头,那么它根本不符合“树”的条件,这就是我称之为 DAG 的原因......这也可能是错误的,具体取决于您的要求 真的是。)
-
您正在构建的结构看起来像经济学中的binomial options pricing model(也在“格模型”的" tree-based equity option valuation" sidebar 中)。它基于类似错误命名的“树”,甚至暗示“二项式”不仅仅是“二进制”的错字。 (我认为它是一个用于表示多项式集合的 DAG……这突然变得很有意义。)这是您的目标吗?
标签: python algorithm python-3.x data-structures tree