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

需求

我们有如下的树型结构
如何给树型结构添加大纲目录索引

想统一给这样的数据,添加目录索引,变成这样
如何给树型结构添加大纲目录索引

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

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

实现

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

比如第一层添加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‘])

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

上一篇:001、pytest安装和第一个demo


下一篇:力扣 24题 两两交换链表中的节点