我有一个以下形式的随机二叉树
12
13,1429,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
root = Tree(12)
root.left =树(13)
root.right =树(14)
root.right.left =树(26)
root.left.right =树(26)
root.left.left =树(29)
root.right.right =树(86)
x = makeList(root)
答案 0 :(得分:3)
我不知道如何使用memoized recursion来解决它。但我仍然发布我的答案,因为它可能部分解决你的问题。
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
答案 1 :(得分:0)
设置时:
def makeList(tree, path =[]):
执行该函数后未删除路径后的空列表,如果第二次调用makeList而没有路径参数,则第一次调用结束时的路径列表将保留。
考虑一下这个功能:
def f(l=[]):
l.append(17)
print l
如果你不使用参数l继续调用f(),你每次都会得到另外17个。
[17]
[17, 17]
[17, 17, 17]