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

时间:2015-11-18 07:08:33

标签: python algorithm python-3.x data-structures tree

将嵌套元组结构(即重组二项/二叉树)转换为

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

enter image description here

1 个答案:

答案 0 :(得分:1)

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)