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;
    }
    
    
    
    

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM