java递归多叉树算法

闲着无聊 写了个常用的递归树结构算法,比较简陋都是遍历 简单粗暴,可以加一些排序 二分查找算法来优化,等有空我在研究下

package base;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSON;

public class TreeTest {
    private Integer id ;
    private Integer pId ;
    private String name;
    private List<TreeTest> children;
    public TreeTest() {
        
    }
    public TreeTest(Integer id, Integer pId, String name) {
        super();
        this.id = id;
        this.pId = pId;
        this.name = 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 List<TreeTest> getChildren() {
        return children;
    }
    public void setChildren(List<TreeTest> children) {
        this.children = children;
    }
    
    @Override
    public String toString() {
        return "TreeTest [id=" + id + ", pId=" + pId + ", name=" + name
                + ", children=" + children + "]";
    }
    
    
    //测试数据
    
    public static void main(String[] args) {
        Map<Integer,TreeTest> map = new HashMap<Integer,TreeTest>();
        
        TreeTest terr1 = new TreeTest(1,0,"一级父节点");
        TreeTest terr2 = new TreeTest(2,1,"一级1子节点");
        TreeTest terr3 = new TreeTest(3,2,"一级2子节点");
        TreeTest terr4 = new TreeTest(4,0,"二级父节点");
        TreeTest terr5 = new TreeTest(5,4,"二级1子节点");
        TreeTest terr6 = new TreeTest(6,4,"二级1子节点2");
        TreeTest terr7 = new TreeTest(7,3,"一级3子节点");
        TreeTest terr8 = new TreeTest(8,5,"二级2子节点");
        map.put(terr1.getId(), terr1);
        map.put(terr2.getId(), terr2);
        map.put(terr3.getId(), terr3);
        map.put(terr4.getId(), terr4);
        map.put(terr5.getId(), terr5);
        map.put(terr6.getId(), terr6);
        map.put(terr7.getId(), terr7);
        map.put(terr8.getId(), terr8);
        List<TreeTest> li =  getChildren(map,0,1);
        
        System.out.println(JSON.toJSON(li));
    }
   
    //递归树
    public static List<TreeTest> getChildren(Map<Integer,TreeTest> trees,Integer id,Integer leve){
        List<TreeTest> list = new ArrayList<TreeTest>();
    
        for (TreeTest tree : trees.values()) {
            if(id == tree.getpId()){            
                System.out.println("-递归" + tree.toString());
                List<TreeTest> chidren = getChildren(trees,tree.getId(),++leve);
                list.add(tree);//本身
                tree.setChildren(chidren);//子节点
                leve--;
            }
            
        }
        return list;
    }
    
    
    
    

}

 

转载于:https://www.cnblogs.com/jaystar/p/5984366.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值