在树中查找值的路径
Finding paths to a value in a tree
假设您要编写一个函数,该函数将一棵树和一个值 x 作为参数。
该函数必须 return 从树的根到该值的所有路径,以列表的形式。如果有多个路径,那么函数 return 是一个列表列表。
这是我目前得到的结果
def path_finder(t,value):
paths = []
if label(t) == value:
return [label(t)]
for b in branches(t):
path = path_finder(b, value)
if path:
paths.append([label(t)]+path)
return paths
但是,给定树 t 和值 x = 5,这是我的输出
t = tree(1, [tree(2, [tree(3), tree(4, [tree(6)]), tree(5)]), tree(5)])
path_finder(t,5)
[[1,[2,5]],[1,5]]
好像是堆叠问题。
对调试有什么帮助吗?
注:label(t) --> root的值
不知道有没有你用的标准树class,所以我做了一个。
class tree():
def __init__(self, val, sub=[]):
self.val = val
self.sub = sub # a list of trees
def label(t):
return t.val
def branches(t):
return t.sub
def path_finder(t, value):
paths = []
if label(t) == value:
paths.append([value])
for b in branches(t):
paths += [[label(t)] + path for path in path_finder(b, value)]
return paths
t = tree(1, [tree(2, [tree(3), tree(4, [tree(6)]), tree(5)]), tree(5)])
for x in range(7):
print(x, path_finder(t, x))
主要修正在paths += [[label(t)] + path for path in path_finder(b, value)]
行。另请注意,当 label(t) == value
时,我不会立即返回列表。在那一刻停止代码将不会找到每条路径,例如,当节点 5 在另一个节点 5.
输出:
# 0 [] # when path_finder cannot find the value
# 1 [[1]]
# 2 [[1, 2]]
# 3 [[1, 2, 3]]
# 4 [[1, 2, 4]]
# 5 [[1, 2, 5], [1, 5]]
# 6 [[1, 2, 4, 6]]
假设您要编写一个函数,该函数将一棵树和一个值 x 作为参数。 该函数必须 return 从树的根到该值的所有路径,以列表的形式。如果有多个路径,那么函数 return 是一个列表列表。
这是我目前得到的结果
def path_finder(t,value):
paths = []
if label(t) == value:
return [label(t)]
for b in branches(t):
path = path_finder(b, value)
if path:
paths.append([label(t)]+path)
return paths
但是,给定树 t 和值 x = 5,这是我的输出
t = tree(1, [tree(2, [tree(3), tree(4, [tree(6)]), tree(5)]), tree(5)])
path_finder(t,5)
[[1,[2,5]],[1,5]]
好像是堆叠问题。
对调试有什么帮助吗?
注:label(t) --> root的值
不知道有没有你用的标准树class,所以我做了一个。
class tree():
def __init__(self, val, sub=[]):
self.val = val
self.sub = sub # a list of trees
def label(t):
return t.val
def branches(t):
return t.sub
def path_finder(t, value):
paths = []
if label(t) == value:
paths.append([value])
for b in branches(t):
paths += [[label(t)] + path for path in path_finder(b, value)]
return paths
t = tree(1, [tree(2, [tree(3), tree(4, [tree(6)]), tree(5)]), tree(5)])
for x in range(7):
print(x, path_finder(t, x))
主要修正在paths += [[label(t)] + path for path in path_finder(b, value)]
行。另请注意,当 label(t) == value
时,我不会立即返回列表。在那一刻停止代码将不会找到每条路径,例如,当节点 5 在另一个节点 5.
输出:
# 0 [] # when path_finder cannot find the value
# 1 [[1]]
# 2 [[1, 2]]
# 3 [[1, 2, 3]]
# 4 [[1, 2, 4]]
# 5 [[1, 2, 5], [1, 5]]
# 6 [[1, 2, 4, 6]]