深度优先遍历DFS生成嵌套返回值
在一些项目中,一张表里面,同时存在父节点,子节点,孙节点等。并且子节点只知道他的父节点是多少,一个父节点同时存在好几个子节点,这中情况,但是前端要求返回结果时,父节点包含子节点的集合,子节点包含孙节点的集合。这种情况使用深度优先遍历返回结果非常合适。
代码介绍
把所有的父节点放到一个map里面,在循环调用的时候,判断节点的名称是否存在这个map中,如果不存在,说明这个节点是没有子节点的,他是叶子几点,就直接退出嵌套。
在嵌套的代码中,循环遍历总的结合,如果当前的遍历节点的父节点,和传入的节点的name保持一致,说明,当前节点是传入节点的子节点,然后让该子节点嵌套代用,看看子节点内部,是否存在孙节点,直到没有孩子节点为止。
把子节点的结果放到childrenList集合中,然后把当前的节点放到一个集合中,让父节点在把这个集合放到父节点的childrenList集合中,最后直到根节点为止。
为此,一个深度优先遍历,生成嵌套的集合已经完成。
@Data
public class TestVo {
private String name; //名称
private String parent; //父节点名称
private String rootPath; //从根节点开始的路径
private List<TestVo> childrenList; //子节点结合,已经嵌套
private List<String> pid; //父节点,祖父节点集合,没有嵌套
}
public static void main(String[] args) {
TestVo t1 = new TestVo();
t1.setName("1");
t1.setParent(null);
TestVo t11 = new TestVo();
t11.setName("11");
t11.setParent("1");
TestVo t12 = new TestVo();
t12.setName("12");
t12.setParent