[java] view plain copy
package com.tree
public class Node {
private Integer id
private Integer parentId
private String name
private String link
public Integer getId() {
return id
}
public void setId(Integer id) {
this.id = id
}
public Integer getParentId() {
return parentId
}
public void setParentId(Integer parentId) {
this.parentId = parentId
}
public String getName() {
return name
}
public void setName(String name) {
this.name = name
}
public String getLink() {
return link
}
public void setLink(String link) {
this.link = link
}
}
输出树形菜单类:
[java] view plain copy
package com.tree
import java.util.ArrayList
import java.util.List
public class Tree {
private StringBuffer html = new StringBuffer()
private List<Node>nodes
public Tree(List<Node>nodes){
this.nodes = nodes
}
public String buildTree(){
html.append("<ul>")
for (Node node : nodes) {
Integer id = node.getId()
if (node.getParentId() == ) {
html.append("\r\n<li id='" + id + "'>" + node.getName()+ "</li>")
build(node)
}
}
html.append("\r\n</ul>")
return html.toString()
}
private void build(Node node){
List<Node>children = getChildren(node)
if (!children.isEmpty()) {
html.append("\r\n<ul>")
for (Node child : children) {
Integer id = child.getId()
html.append("\r\n<li id='" + id + "'>" + child.getName()+ "</li>")
build(child)
}
html.append("\r\n</ul>")
}
}
private List<Node>getChildren(Node node){
List<Node>children = new ArrayList<Node>()
Integer id = node.getId()
for (Node child : nodes) {
if (id.equals(child.getParentId())) {
children.add(child)
}
}
return children
}
}
Java方法递归是指在一个方法的内部调用自身的过程,以此类推就是java方法递归的理解思想,具体来讲就是把规模大的问题转化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。另外这个解决问题的函数必须有明显的结束条件,这样就不会产生无限递归的情况了。因此,java方法递归的两个条件就是,一通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式;二存在一种简单情境,可以使递归在简单情境下退出。