aaa/bbb/ccc
aaa/ddd/eee
aaa/ddd/ooo
bbb/sss/xxx
eee/sss/aaa
aaa/eee/www
aaa/bbb/ccc/ddd
ccc/eee/www
ccc/eee/www/nnn假设我有这样的一组数据
如何通过一个算法把它变成
aaa
bbb
ccc
ddd
eee
ooo
sss
xxx
aaa
........
这样的树形结构,求源码。
aaa/ddd/eee
aaa/ddd/ooo
bbb/sss/xxx
eee/sss/aaa
aaa/eee/www
aaa/bbb/ccc/ddd
ccc/eee/www
ccc/eee/www/nnn假设我有这样的一组数据
如何通过一个算法把它变成
aaa
bbb
ccc
ddd
eee
ooo
sss
xxx
aaa
........
这样的树形结构,求源码。
解决方案 »
- JAVA代码导出问题
- 急,用jdbc 写"嫺"字保存到informix7.3 db里变成了"?",db 字符集是zh_tw?
- JTable与数据库更新遇到问题
- eclipse中如何要两个工程之间调用
- 请问如何最大化显示一个Swing窗口?
- 谁有sun.jdbc.rowset包?
- 求JBuilder的下载地址
- 网络文件下载该用哪个类呀?
- ●●●●(再线等待)为什么,我在Jbuilder7.0中写的applet程序在AppletView浏览正常但在IE浏览器中,中文却变成乱码
- 请教关于equals的问题
- 二维数组
- 随机产生数字,然后做加法,从键盘上输入你知道的结果,答案正确就对了,答案错误就提示错误!!
bbb/sss/xxx
eee/sss/aaa
在最终树形结构中是怎样排的?(它与前面三行是怎样的关系呢?)这一点不清楚啊.
要组织成树形的,即
aaa
|
|-----bbb
| |
| ------ccc
|
|-----ddd
| |
| ------eee
| |
| ------ooo
|
bbb
|
|----- .....
|生成一个这样的数据结构树,不知道明白了么?
这样你怎么做的出树来?按你的资料做出来一看,绝对是网(图型结构,而不是树形结构)
如
aaa/bbb/ccc
aaa/ddd/eee
aaa/ddd/ooo
bbb/sss/xxx
eee/sss/aaa
aaa/eee/www
aaa/bbb/ccc/ddd
ccc/eee/www
ccc/eee/www/nnn 也就是aaa->bbb->eee->sss->aaa
完了,aaa下面有开始以上循环,而且不只一个死循环谁给你的题目?找他麻烦去
import java.util.ArrayList;
import java.util.List;class TreeNode{
String data=null;
TreeNode parent=null;
List<TreeNode> children=null;
int deep=0;
public boolean equals(Object o){
TreeNode n=(TreeNode)o;
return data.equals(n.data);
}
TreeNode(){
this.data="root";
}
public TreeNode(TreeNode node, String tt,int deep) {
this.parent=node;
this.data=tt;
this.deep=deep;
}
void process(String str){
System.out.println("process:"+str);
String[] t=str.split("/");
TreeNode node=this;
for (int i=0;i<t.length;i++){
String tt=t[i];
TreeNode n=new TreeNode(node,tt,i+1);
node=node.add(n);
//this.print();
}
}
TreeNode add(TreeNode node){
System.out.println("add:"+node.data);
if (children==null)
children=new ArrayList<TreeNode>();
int index=children.lastIndexOf(node);
if (index<0)
children.add(node);
else {
node=children.get(index);
}
return node;
}
void print(){
for (int i=0;i<deep;i++)
System.out.print(" ");
System.out.println(data);
if (children!=null){
for (TreeNode node:children){
node.print();
}
}
}
}public class StringTree {
static final String[] TESTSTRING={"aaa/bbb/ccc",
"aaa/ddd/eee",
"aaa/ddd/ooo",
"bbb/sss/xxx",
"eee/sss/aaa",
"aaa/eee/www",
"aaa/bbb/ccc/ddd",
"ccc/eee/www",
"ccc/eee/www/nnn"};
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeNode root=new TreeNode();
for (String s:TESTSTRING){
root.process(s);
}
root.print();
}}
令人无解的是树的同一层的两个结点可有一个值相同,但这两个结点却不等同,因为结点可以另有关键字标志来保证唯一性,好比张家和王家各有一头驴,但张家不等于王家。
所给出的
aaa/bbb/ccc
aaa/ddd/eee
aaa/ddd/ooo
bbb/sss/xxx
eee/sss/aaa
aaa/eee/www
aaa/bbb/ccc/ddd
ccc/eee/www
ccc/eee/www/nnn
的第一列中连续相同的值被包装成单个结点,循环不变的是同一结点下连续相同的值也被包装成单个结点。据此可建立唯一的多根树。