【深度优先遍历DFS生成嵌套返回值】

深度优先遍历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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值