Java递归如何正确输出树形菜单

Python019

Java递归如何正确输出树形菜单,第1张

首先我们要建立树节点的类:

[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方法递归的两个条件就是,一通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式;二存在一种简单情境,可以使递归在简单情境下退出。