首页 > 其他 > 详细

如何给树型结构添加大纲目录索引

时间:2021-07-13 17:17:50      阅读:9      评论:0      收藏:0      [点我收藏+]

需求

我们有如下的树型结构
技术分享图片

想统一给这样的数据,添加目录索引,变成这样
技术分享图片

我们知道从人眼看,只需要从上到下扫描就行了,可这要放在程序中可怎么写,人的思维和程序是不一样的。

其实这涉及到一个树的遍历问题,有两种方式可以实现

实现

方法一:逐层遍历添加大纲

比如第一层添加x,第二层添加x.x,第三层添加x.x.x,如下图

技术分享图片

python实现

其实这种逐层扩散的遍历叫:“广度优先遍历”,对应的是迭代实现,python代码如下

def add_tree_index_iterative(tree_list):
    if not tree_list:
        return []
    q = []
    for i, v in enumerate(tree_list):
        v[‘index‘] = i + 1
        q.append(v)

    while q:
        v = q.pop(0)  # 出队列
        if v[‘children‘]:
            for i, node in enumerate(v[‘children‘]):
                node[‘index‘] = f‘{v["index"]}.{i + 1}‘
                q.append(node)  # 入队列

这其实借助了一个队列实现,python中的list的append和pop(0)分别对应了队列的入队和出队操作

方法二:深度遍历添加大纲

就是每次都走到头添加完了再回来

技术分享图片

这种一次走到头的遍历叫:“深度优先遍历”,对应的是递归实现

python实现

def add_tree_index_recursive(tree_list, parent_index=""):
    for i, v in enumerate(tree_list):
        if not parent_index:
            v[‘index‘] = i + 1
        else:
            v[‘index‘] = f‘{parent_index}.{i + 1}‘
        if v[‘children‘]:
            add_tree_index_recursive(v[‘children‘], v[‘index‘])

如何给树型结构添加大纲目录索引

原文:https://www.cnblogs.com/chenqionghe/p/15006652.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!