各位有没有什么比较好的方式来把"把路径字符串转换成一棵树,并且可以通过输入一个节点把它的子节点全部输出来"。

2014-11-20 17:12:49 +08:00
 iMouseWu
各位有没有什么比较好的方式来把"把路径字符串转换成一棵树,并且可以通过输入一个节点把它的子节点全部输出来"。
比如说现在我有以下字符串:
A-B-C-D;
A-B-C-F;
A-B-H;
A-B-G-T;
转换以后就成这个样子:
A
B
C
H
D
F
G
比如说我输入B节点,那么输出的结果就是:
C
H
D
F
G
我现在能想法想到的方法是,对原始数据处理一下。先增加一个root节点,现在我需要查root下的所有子节点。那么就遍历字符串数组A,并且设置level=0,把字符串用"-"分割成数组B,取出B[0]的值并且去重。这些取出来都是第一层的。然后再通过B[0]的值,去找它的子节点。如果递归下去。这是通过root来生成树。
接下来是,通过输入一个节点C,那么在输入的时候,我需要把它的层级一起传过来3|C,这种格式。其它地方和查找root的是一样的。只是把B[0]改成相应的B[3],接下来也是递归。
这种方式的前提是同一层级下,不能有相同的名字。
大家有没有什么比较效率和思路更加清晰的方式呀?
3532 次点击
所在节点    问与答
12 条回复
rrfeng
2014-11-20 17:30:46 +08:00
你这个是树吗?还是说排版出了问题??
kslr
2014-11-20 18:37:49 +08:00
有个tree命令
iMouseWu
2014-11-20 18:44:15 +08:00
@rrfeng 。。。。应该是排版把空格给排掉了,。。。
imn1
2014-11-20 18:51:41 +08:00
把“-”替换为xml标签,外套<root></root>
然后用xml parse吧

其实每个字串是全路经的简单多了,方法多的是,正则什么的都可以,最简单就是排排序也能按字符顺序提取啊
那些用parent id的才算难,可能要二叉树什么的
aaaa007cn
2014-11-20 19:11:05 +08:00
后缀树……吗?
iMouseWu
2014-11-20 19:23:02 +08:00
@aaaa007cn 不是诶。可以看下我刚刚增加的东西。可能前面的描述不恰当。
iMouseWu
2014-11-20 19:23:52 +08:00
@kslr 能不能稍微讲的详细点?这个我不是很懂
iMouseWu
2014-11-20 19:24:44 +08:00
@imn1 这里需要知道哪个“-”换成哪个xml标签。
就是这里主要是这个对对应关系难以处理
rrfeng
2014-11-20 19:50:29 +08:00
我懂了
最终目的是转成 xml 形式

所谓的成『树』只是为了进一步添加标签罢了。

按理说这个变成树形不是很难啊

创建一个树结构,第一条 ABCD 存进去
然后后面每条从 X[0],查找树上有无这个节点,找到的话看子节点是否有X[1], 有的话继续,没的话添加子节点,后面的所有子节点直接跟上,不用再遍历了。

实际上不需要变树这一步,跟变成 xml 是同样的过程。

或许有直接 parse 成 xml 的方法?找找看?
imn1
2014-11-20 20:10:14 +08:00
@iMouseWu
不需要作对应,换成相同的标签就行了,只是要一个套一个,形成层级就够了
<node>A<node>B<node>……</node></node></node>
然后用xpath paser(前面我写错了xml paser),用交并差去重,再组合
aaaa007cn
2014-11-20 20:44:26 +08:00
不知道为什么一开始会想到后缀树……
刚才想了下
这不是有向图的遍历问题么
然后看到更新
又糊涂了
假设有
A-B-C-D
A-B-C-E
A-F-C-G
那么输入 3|C 输出应该是什么?
那个“同一层级下不能有相同的名字”的前提是问题中已经确定的还是你自己假设的?
iMouseWu
2014-11-21 20:53:32 +08:00
@aaaa007cn 是假设。如果不满足这个条件的话。那么按照我的方法来的话。就会出错

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/148064

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX