如何在Python中返回随机二叉树的所有可能路径
我有一个如下形式的随机二叉树 十二, 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]的形式返回所有可能的路径。我尝试了以下代码。我无法更新列表。提前谢谢如何在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
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