有更好的方法可以在一棵树上找到一个min,但是我的主要问题是为什么我无法更改记录并在整个跟踪过程中都无法对其进行跟踪。我不想使用全局变量。
record = sys.maxsize
def findMin(tree, record):
if list(tree.keys())[0] < record:
record = list(tree.keys())[0]
if len(tree[list(tree.keys())[0]]) == 0:
return
else:
for v in tree[list(tree.keys())[0]]:
findMin(v, record)
findMin({100: [{40: [{34: [{15: []}]}], 56: [{67: [{13: [{9:[]}]}]}], 79: [{92: [{84:[{6:[]}]}]}]}]}
, record)
print(record)
答案 0 :(得分:0)
在这种问题上,避免全局变量是棘手的。这是使用python的多功能生成器的一种方法-
def find_min (tree):
# recursively list all keys and values
def values (t):
if (isinstance(t, dict)):
for (k,v) in t.items():
yield k
yield from values(v)
elif (isinstance(t, list)):
for v in t:
yield from values(v)
else:
yield t
# find lowest value in iterable
def min (iter):
a = inf
for x in iter:
if x < a:
a = x
return a
# find lowest value in tree
return min(values(tree))
在我们的数据树上对其进行测试-
t = {100: [{40: [{34: [{15: []}]}], 56: [{67: [{13: [{9:[]}]}]}], 79: [{92: [{84:[{6:[]}]}]}]}]}
print(find_min(t))
# 6