一个List里有例如如下数据
101
10101
10102
102
10201
10202
1020101
1020102
...
都是按照树分类的编号
101
 |-10101
 |-10102
102
 |-10201
   |-1020101
   |-1020102
 |-10202
...
如何编写代码取得此list中的所有叶子节点?即按照所给例子中取得的数字应为10101,10102,1020101,1020102,10202
谢谢!

解决方案 »

  1.   

    上什么源程序?这些数字就是放在一个list里面的,只不过是他们之间的关系是一棵树
      

  2.   

    List list = new ArrayList();
    list.add("101");
    list.add("10101");
    list.add("10102");
    list.add("102");
    list.add("10201");
    list.add("10202");
    list.add("1020101");
    list.add("1020102");for (int i = 0; i < list.size(); i++) {
    String strLeaf = list.get(i).toString();
    boolean isLeaf = false;
    for (int j = 0; j < list.size(); j++) { if (j != i) {
    String strTemp = list.get(j).toString(); if (strTemp.indexOf(strLeaf) == 0) {
    break;
    }
    }
    if (j == list.size() - 1) {
    isLeaf = true;
    } }
    if (isLeaf) {
    System.out.println(strLeaf);
    }这样可以吗
      

  3.   

    那你这个list中是那一个实例啊!(转化时)肯定有一个实例吧!最好是定义一个字段知道那一个是父的,parent.
      

  4.   

    用一个树结构来存储会好一些,用list存储树结构关系的处理效率很低的
      

  5.   

    感谢syzhwh的代码,这些数字是数据库表中某个字段中的数据,从数据库里查询出来就放到list里了,如果想用树结构来存储,那怎样从数据库里查询出来以后存到一个树结构的容器中去呢?
      

  6.   


    应该在数据库里面就反映这种树状结构的,不知道你的表是怎么设计的,我觉得应该这样  id        parentId  
      101       null
      10101     101
      10102     101
      102       null 
      10201     102
      1020101   10201
      1020102   10201
      10202     102
      ...       ...这样不就很好查询叶子节点吗 , 在id 中但不在parentId中的就是叶子
      

  7.   

    import java.util.*;public class test {
    public test() {
    List<String> list = new ArrayList();
    list.add("101");
    list.add("10101");
    list.add("10102");
    list.add("102");
    list.add("10201");
    list.add("10202");
    list.add("1020101");
    list.add("1020102"); for (int i = 0; i < list.size(); i++) {
    if (FindChildNode(list, i) == -1)
    System.out.println(list.get(i));
    }
    }

    // 查找孩子节点。找到返回孩子节点的索引,否则返回-1
    int FindChildNode(List<String> list, int iIndex) {
    for (int i = 0; i < list.size(); i++) {
    if (i != iIndex) {
    if (list.get(i).indexOf(list.get(iIndex)) == 0)
    return i;
    }
    }
    return -1;
    } public static void main(String[] args) {
    new test();
    }
    }