从嵌套元组到二叉树的边缘,在 Python

From nested tuples to edges of a binomial tree, in Python

将嵌套元组结构(即重组 binomial/binary 树)转换为

的快速方法是什么
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表示如下二叉树结构

def g(t):
    res = []
    for i,x in enumerate(t[:-1]):
        res.append((x, t[-1][i]))
        res.append((x, t[-1][i+1]))
    return res

def h(t):
    if isinstance((t[-1]), tuple):
        return g(t) + h(t[-1])
    else:
        return []

t = (4, (3, 5, (2, 4, 6, (1, 3, 5, 7))))
print h(t)