Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中返回随机二叉树的所有可能路径_Python_Random_Tree_Binary Tree - Fatal编程技术网

如何在Python中返回随机二叉树的所有可能路径

如何在Python中返回随机二叉树的所有可能路径,python,random,tree,binary-tree,Python,Random,Tree,Binary Tree,我有一个如下形式的随机二叉树 十二, 13、14 29、26、89 每个节点有两个子节点,即(12->(13,14),13->(29,26),14->(26,89))。在这里,我需要以[12,13,29]、[12,13,26]、[12,14,26]、[12,14,89]的形式返回所有可能的路径。我尝试了以下代码。我无法更新列表。提前谢谢 class Tree: def __init__(self, data, left=None, right=None): self.d

我有一个如下形式的随机二叉树

十二,

13、14

29、26、89

每个节点有两个子节点,即(12->(13,14),13->(29,26),14->(26,89))。在这里,我需要以[12,13,29]、[12,13,26]、[12,14,26]、[12,14,89]的形式返回所有可能的路径。我尝试了以下代码。我无法更新列表。提前谢谢

class Tree:

    def __init__(self, data, left=None, right=None):
        self.data = data
        self.left = left
        self.right = right

    def __str_(self):
        return '%s' % self.data

def makeList(tree, path =[]):
    if(tree != None):
        path.append(tree.data)
        if tree.left:
            path.append(makeList(tree.left, path))
        if tree.right:
            path.append(makeList(tree.left, path))

    return path
根=树(12)

root.left=树(13)

root.right=树(14)

root.right.left=树(26)

root.left.right=树(26)

root.left.left=树(29)

root.right.right=树(86)

设置此选项时:

def makeList(tree, path =[]):
在函数执行后,不会删除路径后的空列表,如果第二次调用makeList时没有使用path参数,则第一次调用结束时的路径列表将保留

考虑以下功能:

def f(l=[]):
    l.append(17)
    print l
如果继续调用f(),而不使用参数l,则每次将得到另外17个参数

[17]
[17, 17]
[17, 17, 17]

我不知道如何用一个简单的方法解决它。但我仍然会发布我的答案,因为它可能会部分解决你的问题

def makeList(tree):
    paths = []
    if not (tree.left or tree.right):
        return [[tree.data]]
    if tree.left:
        paths.extend([[tree.data] + child for child in makeList(tree.left)])
    if tree.right:
        paths.extend([[tree.data] + child for child in makeList(tree.right)])
    return paths

如果
26
同时连接到
13
14
这不是二叉树!(在二叉树中,每个节点最多有一个父节点)。在这里,即使没有返回列表,函数怎么可能是一个列表?。
def makeList(tree):
    paths = []
    if not (tree.left or tree.right):
        return [[tree.data]]
    if tree.left:
        paths.extend([[tree.data] + child for child in makeList(tree.left)])
    if tree.right:
        paths.extend([[tree.data] + child for child in makeList(tree.right)])
    return paths