背景
之前写了一篇列表转树的文章,有列表转树的需求自然就会有树转列表的需求,这里我把树转列表的思路与代码再整理一下。
思路分析
需求是什么?
老规矩,上图
先说一下整体思路,就是遍历树中的每一个节点,在遍历过程中要把节点的父节点id记录下来,并作为该节点的parentId属性值(保留层级关系,后续根据这个parentId和节点的id可以转回树结构),然后把该节点存入一个列表中。遍历过程完成,也就实现了把树结构转换成了列表结构。
树的遍历方式有两种,一种是深度优先遍历,一种是广度优先遍历,这两种方式思路如下图所示:
广度优先:
深度优先
思路看这两个图应该理得清楚了
我这里深度优先遍历采用了递归的方式,然后广度优先遍历采用了循环的方式。
执行步骤
先说深度优先吧:
从第一层开始遍历,遍历该层中所有节点,为每一个遍历到的节点添加上parentId属性,存入结果列表。
每一个遍历节点存入结果列表后,检测该节点是否存在子节点,如果存在,则将子节点作为数据源重复第一步
当所有的节点都处理完成后,整个树结构也就完成了转化
再说说广度优先:
从第一层开始遍历,遍历该层中所有节点&#x