java建立树_java – 如何创建一个树?

我有一个文本文件,其内容如下:

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": {}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值