数据库中查出的树形,获取其所有子孙(递归方式)
如下用户类
public class User implements Serializable {
/**
* id
*/
private String id;
/**
* 登录名
*/
private String name;
/**
* 密码
*/
private String psw;
/**
* 父id
*/
private String parentId;
/**
* 创建人ID
*/
public String creatorId;
private Set<User> children = new HashSet<>();
private User parent;
//省略getter setter方法
某个节点可以有多个后代,后代还可以有多个后代,
需求 :要遍历节点的所有后代
- 给定节点,遍历它的子节点
- 所有子节点加入到后代列表
- 每个子节点再执行步骤
1
类似于图的广度遍历优先
到这里想到了递归,思想确定,代码就好写了
/**
* 获取用户所有下属信息
*
* @param root
* @return
*/
public static List<User> getAllChildren(User root) {
//子代列表
List<User> result = new ArrayList<>();
if (root.getChildren().size() > 0) {
//保存直接子节点
result.addAll(root.getChildren());
//遍历直接子节点
for (User user : root.getChildren()) {
//递归
List<User> ch = getAllChildren(user);
//保存子节点
result.addAll(ch);
}
}
return result;
}
还是多学点算法,算法可以使问题简单。
把学的算法用到开发中,很爽。