转换二叉树中的嵌套列表列表

时间:2017-01-10 08:44:58

标签: python list tree binary-search-tree

在python中,我有一个表示二叉树的嵌套列表列表:

L = [0, [[1, [2, 3]], [4, [5, 6]]]]

所以这棵树可以看作如下:

        0
       /  \
      1    4
     /\    /\ 
    2  3  5  6

我现在想要实现一个函数,该函数将树的级别作为输入并返回该级别的所有节点:

GetNodes(0) = 0
GetNodes(1) = [1,4]
GetNodes(2) = [2,3,5,6]

有没有一种简单的方法可以做到这一点,避免在L的所有嵌套列表上进行残酷搜索? 是否有可能在python中对二进制树进行更标准的管理,可能会将我的列表列表转换为其他内容?

2 个答案:

答案 0 :(得分:1)

我会选择BFS。请尽快发布代码:)

编辑:你走了

L = [0, [[1, [2, 3]], [4, [5, 6]]]]


def getLevel(k, tree):
    currentLevel = [tree[0]]
    nextLevel = tree[1]
    level = 1
    while level <= k:
        _currentLevel = []
        _nextLevel = []
        for subtree in nextLevel:
            if isinstance(subtree, list):
                _currentLevel.append(subtree[0])
                if isinstance(subtree[1], list):
                    _nextLevel.append(subtree[1])
                else:
                    _currentLevel.append(subtree[1])
            else:
                _currentLevel.append(subtree)
        currentLevel= _currentLevel
        nextLevel = _nextLevel
        level+=1
    return currentLevel



print getLevel(0, L)
print getLevel(1, L)
print getLevel(2, L)

答案 1 :(得分:1)

我的解决方案将解析为dict

l = [0, [[1, [2, 3, [[7,8], [10,11]]]], [4, [5, 6, [9,10]]]]]
datadict = {}

def toTree(data,depth=0):
    for elem in data:
        if not isinstance(elem, int):
            toTree(elem, depth+1)
        else:
            d = depth - 1 if depth > 0 else depth
            if datadict.get(d):
                datadict[d] = datadict[d] + [elem]
            else:
                datadict[d] = [elem]

toTree(l)
print(datadict)

输出将是

  

{0:[0],1:[1,4],2:[2,3,5,6],3:[9,10],4:[7,8,10,11]}

你可以使用datadict.get(2)来获取[2,3,5,6]