求递归算法 树

id name parentId

TestDemo right6 = new TestDemo(6,"客户添加",5);
TestDemo right7 = new TestDemo(7,"客户删除",5);
TestDemo right8 = new TestDemo(8,"客户修改",5);
TestDemo right5 = new TestDemo(5,"客户管理",0);
TestDemo right10 = new TestDemo(10,"VIP客户添加",6);
TestDemo right11 = new TestDemo(11,"普通客户添加",6);
rightList.add(right6);
rightList.add(right7);
rightList.add(right8);
rightList.add(right10);
rightList.add(right5);

rightList.add(right11);

最终要求效果:[拼接成以下字符串]
首先 肯定是要判断有没有 父类节点为0的 有的话 那么 该条数据就为父节点

sx:tree


/sx:treenode
/sx:treenode
/sx:treenode
/sx:treenode
/sx:treenode
/sx:tree

客户添加 修改 删除的 父节点都为5 上面的应该很清楚了

但是目前这个是2级 如果3级 甚至无限级 怎么递归 我这只能递归2级 如上图的 但是考虑长远 递归树的无限递归

求各位指点迷津了! 小子不甚感激

[code="java"]
public class TestDemo {
private int id;
private String name;
private int parentId;
private Set child = new HashSet();

public String toXML(){
    StringBuffer xml = new StringBuffer();
    if(parentId==0){
        xml.append("<sx:tree>");
    }else{
        xml.append("<sx:treenode lable='"+name+"'>");
    }

    for(TestDemo td : child){
        xml.append(td.toXML());
    }

    if(parentId==0){
        xml.append("</sx:tree> ");
    }else{
        xml.append("</sx:treenode>");
    }
    return xml.toString();
}

}[/code]
[code="java"]
public static void main(String[] args) {
List rightList = new ArrayList();
TestDemo right6 = new TestDemo(6,"客户添加",5);
TestDemo right7 = new TestDemo(7,"客户删除",5);
TestDemo right8 = new TestDemo(8,"客户修改",5);
TestDemo right5 = new TestDemo(5,"客户管理",0);
TestDemo right10 = new TestDemo(10,"VIP客户添加",6);
TestDemo right11 = new TestDemo(11,"普通客户添加",6);
rightList.add(right6);
rightList.add(right7);
rightList.add(right8);
rightList.add(right10);
rightList.add(right5);
rightList.add(right11);
TestDemo root = getRoot(rightList);
System.out.println(root.toXML());
}

public static TestDemo getRoot(List<TestDemo> list){
    TestDemo root = null;
    for(TestDemo td : list){
        if(td.getParentId()==0){
            root = td;
        }
    }
    initChild(root,list);
    return root;
}
public static void initChild(TestDemo tdemo,List<TestDemo> list){
    int parentId = tdemo.getId();
    for(TestDemo td : list){
        if(td.getParentId()==parentId){
            initChild(td,list);
            tdemo.getChild().add(td);
        }
    }
}

[/code]

没用过这个标签, 不过google了下, 可以用动态树,或者ajax树实现