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
........
这样的树形结构,求源码。    

解决方案 »

  1.   

    答:搞不懂题目啊.疑问是:这个第四行与第五行的数据:
    bbb/sss/xxx 
    eee/sss/aaa 
    在最终树形结构中是怎样排的?(它与前面三行是怎样的关系呢?)这一点不清楚啊.
      

  2.   

    解释下,现在的结构是平行的结构。
    要组织成树形的,即
    aaa
    |
    |-----bbb
    |      |
    |      ------ccc
    |
    |-----ddd
    |       |
    |        ------eee
    |       |
    |        ------ooo
    |
    bbb
    |
    |----- .....
    |生成一个这样的数据结构树,不知道明白了么?
      

  3.   

    是说你的sss节点有2个父亲(天啊,真可怕,还好不是人)
    这样你怎么做的出树来?按你的资料做出来一看,绝对是网(图型结构,而不是树形结构)
      

  4.   

    我再看了下,而且绝对会死循环了,

    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下面有开始以上循环,而且不只一个死循环谁给你的题目?找他麻烦去
      

  5.   


    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();
    }}
      

  6.   

    我想题目意思应该这样理解,以aaa,bbb,ccc,...生成一个树,并且是多根树。其实很多树都有主根,但还是有些树没有主根的。
    令人无解的是树的同一层的两个结点可有一个值相同,但这两个结点却不等同,因为结点可以另有关键字标志来保证唯一性,好比张家和王家各有一头驴,但张家不等于王家。
    所给出的
    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
    的第一列中连续相同的值被包装成单个结点,循环不变的是同一结点下连续相同的值也被包装成单个结点。据此可建立唯一的多根树。