无限级树形递归,实际算法只有几行就可完成递归操作。
递归的核心思想是函数自身调用。代码:
public class UnlimitTreeRecursive{
private static java.util.List<SingleNode> list
= new java.util.ArrayList<SingleNode>();
private static String ids="";
public static String recursive(java.util.Collection<SingleNode> c,Integer pid){
if(c==null || c.size()<2)
return "";
java.util.Iterator<SingleNode> it = c.iterator();
while(it.hasNext()){
SingleNode sn = it.next();
if(sn.getPid()==pid){
list.add(sn);
ids += sn.getId()+",";
recursive(c,sn.getId());
}
}
return ids;
}
public static void main(String[] args)
{
//测试递归结果
SingleNode sn1 = new SingleNode(1,0,"食物");
SingleNode sn2 = new SingleNode(5,1,"肉类");
SingleNode sn3 = new SingleNode(8,1,"水果");
SingleNode sn4 = new SingleNode(10,0,"淡水鱼");
SingleNode sn5 = new SingleNode(16,5,"猪肉");
SingleNode sn6 = new SingleNode(4,5,"牛肉好吃");
SingleNode sn7 = new SingleNode(13,8,"火龙果");
SingleNode sn8 = new SingleNode(3,16,"前腿肉");
SingleNode sn9 = new SingleNode(2,8,"苹果");
SingleNode sn10 = new SingleNode(11,10,"草鱼");
SingleNode sn11 = new SingleNode(14,2,"青苹果");
java.util.List<SingleNode> list = new java.util.ArrayList<SingleNode>();
list.add(sn1);list.add(sn4);list.add(sn7);list.add(sn9);list.add(sn11);
list.add(sn2);list.add(sn5);list.add(sn8);list.add(sn10);
list.add(sn3);list.add(sn6);
UnlimitTreeRecursive.recursive(list, 0);
System.out.println(UnlimitTreeRecursive.ids);
for(SingleNode sn:UnlimitTreeRecursive.list)
System.out.println(sn);
}
}
/**
* 节点类型定义
*/
class SingleNode{
private Integer id; //节点ID
private Integer pid; //父节点ID
private String name; //节点名称
public SingleNode(){}
public SingleNode(Integer id,Integer pid,String name){
this.setId(id);
this.setPid(pid);
this.setName(name);
}
public Integer getId(){
return id;
}
public void setId(Integer id){
this.id = id;
}
public Integer getPid() {
return pid;
}
public void setPid(Integer pid){
this.pid = pid;
}
public String getName(){
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return "SingleNode [id=" + id + ", name=" + name + ", pid=" + pid + "]";
}
}