天天看点

树形结构实现之递归

菜单目录树结构查询方法,树形结构的关键点在于递归

public class Menu {

   private String id;

   private String parentId;

   private String url;

   private List<Menu> children;

       /*省略get\set*/

}

public class MenuTree {

   private List<Menu> menuList = new ArrayList<Menu>();

   public MenuTree(List<Menu> menuList) {

       this.menuList=menuList;

   }

   //建立树形结构

   public List<Menu> builTree(){

       List<Menu> treeMenus =new  ArrayList<Menu>();

       for(Menu menuNode : getRootNode()) {

           menuNode=buildChilTree(menuNode);

           treeMenus.add(menuNode);

       }

       return treeMenus;

   //递归,建立子树形结构

   private Menu buildChilTree(Menu pNode){

       List<Menu> chilMenus =new  ArrayList<Menu>();

       for(Menu menuNode : menuList) {

           if(menuNode.getParentId().equals(pNode.getId())) {

               chilMenus.add(buildChilTree(menuNode));

           }

       pNode.setChildren(chilMenus);

       return pNode;

   //获取根节点

   private List<Menu> getRootNode() {

       List<Menu> rootMenuLists =new  ArrayList<Menu>();

     // parentId为空就表示为第一级菜单

           if(menuNode.getParentId() == null) {

               rootMenuLists.add(menuNode);

       return rootMenuLists;

继续阅读