Java递归应用:输出树形菜单

  • Post author:
  • Post category:java



树节点类:



  1. package


    cn.com.tree;




  2. public




    class


    Node {



  3. private


    Integer id;



  4. private


    Integer parentId;



  5. private


    String name;



  6. private


    String link;




  7. public


    Integer getId() {



  8. return


    id;


  9. }


  10. public




    void


    setId(Integer id) {



  11. this


    .id = id;


  12. }


  13. public


    Integer getParentId() {



  14. return


    parentId;


  15. }


  16. public




    void


    setParentId(Integer parentId) {



  17. this


    .parentId = parentId;


  18. }


  19. public


    String getName() {



  20. return


    name;


  21. }


  22. public




    void


    setName(String name) {



  23. this


    .name = name;


  24. }


  25. public


    String getLink() {



  26. return


    link;


  27. }


  28. public




    void


    setLink(String link) {



  29. this


    .link = link;


  30. }

  31. }


输出树形菜单类:



  1. package


    cn.com.tree;




  2. import


    java.util.ArrayList;



  3. import


    java.util.List;




  4. public




    class


    Tree {



  5. private


    StringBuffer html =


    new


    StringBuffer();



  6. private


    List<Node> nodes;




  7. public


    Tree(List<Node> nodes){



  8. this


    .nodes = nodes;


  9. }



  10. public


    String buildTree(){


  11. html.append(

    “<ul>”


    );



  12. for


    (Node node : nodes) {


  13. Integer id = node.getId();


  14. if


    (node.getParentId() ==


    null


    ) {


  15. html.append(

    “\r\n<li id='”


    + id +


    “‘>”


    + node.getName()+


    “</li>”


    );


  16. build(node);

  17. }

  18. }

  19. html.append(

    “\r\n</ul>”


    );



  20. return


    html.toString();


  21. }



  22. private




    void


    build(Node node){


  23. List<Node> children = getChildren(node);


  24. if


    (!children.isEmpty()) {


  25. html.append(

    “\r\n<ul>”


    );



  26. for


    (Node child : children) {


  27. Integer id = child.getId();

  28. html.append(

    “\r\n<li id='”


    + id +


    “‘>”


    + child.getName()+


    “</li>”


    );


  29. build(child);

  30. }

  31. html.append(

    “\r\n</ul>”


    );


  32. }

  33. }



  34. private


    List<Node> getChildren(Node node){


  35. List<Node> children =

    new


    ArrayList<Node>();


  36. Integer id = node.getId();


  37. for


    (Node child : nodes) {



  38. if


    (id.equals(child.getParentId())) {


  39. children.add(child);

  40. }

  41. }


  42. return


    children;


  43. }

  44. }


测试

类:



  1. package


    zzj.test;




  2. import


    java.util.ArrayList;



  3. import


    java.util.List;




  4. import


    cn.com.tree.Node;



  5. import


    cn.com.tree.Tree;





  6. public




    class


    Test {




  7. /**



  8. * @param args



  9. */





  10. public




    static




    void


    main(String[] args) {


  11. List<Node> nodes =

    new


    ArrayList<Node>();



  12. Node node1 =

    new


    Node();


  13. node1.setId(

    1


    );


  14. node1.setName(

    “node1”


    );


  15. node1.setParentId(

    null


    );


  16. node1.setLink(

    null


    );


  17. nodes.add(node1);


  18. Node node11 =

    new


    Node();


  19. node11.setId(

    11


    );


  20. node11.setName(

    “node11”


    );


  21. node11.setParentId(

    1


    );


  22. node11.setLink(

    null


    );


  23. nodes.add(node11);


  24. Node node111 =

    new


    Node();


  25. node111.setId(

    111


    );


  26. node111.setName(

    “node111”


    );


  27. node111.setParentId(

    11


    );


  28. node111.setLink(

    null


    );


  29. nodes.add(node111);


  30. Node node12 =

    new


    Node();


  31. node12.setId(

    12


    );


  32. node12.setName(

    “node12”


    );


  33. node12.setParentId(

    1


    );


  34. node12.setLink(

    null


    );


  35. nodes.add(node12);


  36. Node node2 =

    new


    Node();


  37. node2.setId(

    2


    );


  38. node2.setName(

    “node2”


    );


  39. node2.setParentId(

    null


    );


  40. node2.setLink(

    null


    );


  41. nodes.add(node2);


  42. Node node21 =

    new


    Node();


  43. node21.setId(

    21


    );


  44. node21.setName(

    “node21”


    );


  45. node21.setParentId(

    2


    );


  46. node21.setLink(

    null


    );


  47. nodes.add(node21);


  48. Node node3 =

    new


    Node();


  49. node3.setId(

    3


    );


  50. node3.setName(

    “node3”


    );


  51. node3.setParentId(

    null


    );


  52. node3.setLink(

    null


    );


  53. nodes.add(node3);


  54. Tree tree =

    new


    Tree(nodes);


  55. System.out.println(tree.buildTree());

  56. }

  57. }

输出:



  1. <ul>


  2. <li id=’1′>node1</li>

  3. <ul>

  4. <li id=’11’>node11</li>

  5. <ul>

  6. <li id=’111′>node111</li>

  7. </ul>

  8. <li id=’12’>node12</li>

  9. </ul>

  10. <li id=’2′>node2</li>

  11. <ul>

  12. <li id=’21’>node21</li>

  13. </ul>

  14. <li id=’3′>node3</li>

  15. </ul>


浏览器效果: