天天看點

樹形結構實作之遞歸

菜單目錄樹結構查詢方法,樹形結構的關鍵點在于遞歸

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;

繼續閱讀