– 递归三要素
1、明确递归终止条件;
2、给出递归终止时的处理办法;
3、提取重复的逻辑,缩小问题规模。
- 实体类
public class TreeDTO {
private int id;
private int pid;
private String treeName;
private List<TreeDTO> children;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public String getTreeName() {
return treeName;
}
public void setTreeName(String treeName) {
this.treeName = treeName;
}
public List<TreeDTO> getChildren() {
return children;
}
public void setChildren(List<TreeDTO> children) {
this.children = children;
}
}
- 实现类
@Override
public List<TreeDTO> getTree() {
// 查询出所有的菜单数据集合
List<TreeDTO> tree = xxxMapper.getTree();
// 生成菜单树
return createTree(0, tree);
}
/**
* 递归生成菜单树
*/
private List<TreeDTO> createTree(int pid, List<TreeDTO> menus) {
List<TreeDTO> treeMenu = new ArrayList<>();
for (TreeDTO menu : menus) {
if (pid == menu.getPid()) {
treeMenu.add(menu);
menu.setChildren(createTree(menu.getId(), menus)); // 递归重点
}
}
return treeMenu;
}