递归算法-无限级树形递归

无限级树形递归,实际算法只有几行就可完成递归操作。
递归的核心思想是函数自身调用。代码:

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 + "]";
    }
   
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值