我有一个文本文件,其内容如下:
a.b.c.d
a.c
a.d
a.x.y.z
a.x.y.a
a.x.y.b
a.subtree
我想把它变成一棵树:
a
/ / \ \ \
b c d x subtree
| |
c y
| / | \
d z a b
编辑:具有两个节点的a.x.y.a路径需要被视为单独的实体.本质上,a.x.y.a就是路径.
我们可以像这样查看输入文件:
Level0.Level1.Level2...
我试图在python中做到这一点(我也熟悉java,也希望java的答案)但不知怎的,我在逻辑上无法做到这一点.
我的基本树结构有点像这样:
class Tree:
def __init__(self,data):
self.x = data
self.children = []
逻辑有点像这样:
for line in open("file","r"):
foos = line.split(".")
for foo in foos:
put_foo_in_tree_where_it_belongs()
我该如何处理这个问题?
另外,如果有任何java库帮助我这样做,我也可以转向java.只需要完成这个.
最佳答案 基本算法应该是这样的:
def add_path(root, path):
if path:
child = root.setdefault(path[0], {})
add_path(child, path[1:])
root = {}
with open('tree.txt') as f:
for p in f:
add_path(root, p.strip().split('.'))
import json
print json.dumps(root, indent=4)
输出:
{
"a": {
"x": {
"y": {
"a": {},
"z": {},
"b": {}
}
},
"c": {},
"b": {
"c": {
"d": {}
}
},
"d": {},
"subtree": {}
}
}