我对python相对较新,当我遇到这个问题时,我正在尝试一些问题。树以下列方式在文本文件中定义,
d:
e:
b: d e
c:
a: b c
所以,我想写一个简单的python脚本来找到它的深度。我无法找到解决问题的策略。是否有任何算法或技术?
答案 0 :(得分:2)
我的策略如下:
对于你的情况:
d -> b -> a (len 3)
e -> b -> a (len 3)
c -> a (len 2)
这可以被描述为“自下而上”的树构造方法/算法。
答案 1 :(得分:1)
您提供的树格式具有不错的属性:如果x
是y
的孩子,则x
在文件中y
之前给出。因此,您只需循环浏览文件一次,然后将深度读入字典即可。例如:
depth = {}
for line in f:
parent, children = read_node(line)
if children:
depth[parent] = max(depth.get(child,1) for child in children) + 1
然后只有print depth['a']
,因为a
是根。这里read_node
是一个快速函数,用于从文件的一行解析父级和子级:
def read_node(line):
parent, children = line.split(":")
return parent, children.split()
答案 2 :(得分:1)
我不确定你的深度是什么意思,如果要访问每个节点需要多少步骤,你可以使用Depth-First Search来查看访问图中每个节点所需的时间
这是一个简单的实现:
text_tree = """d:
e:
b: d e
c:
a: b c"""
tree = {}
for line in text_tree.splitlines():
node, childs = line.split(":")
tree[node] = set(childs.split())
def dfs(graph, start):
visited, stack = [], [start]
while stack:
vertex = stack.pop()
if vertex not in visited:
visited.append(vertex)
stack.extend(graph[vertex])
return visited
result = dfs(tree,"a")
print "It took %d steps, to visit every node in tree, the path took was %s"%(len(result),result)
哪个输出:
It took 5 steps, to visit every node in tree, the path took was ['a', 'b', 'd', 'e', 'c']