1. 程式人生 > 其它 >如何給樹型結構新增大綱目錄索引

如何給樹型結構新增大綱目錄索引

目錄

需求

我們有如下的樹型結構

想統一給這樣的資料,新增目錄索引,變成這樣

我們知道從人眼看,只需要從上到下掃描就行了,可這要放在程式中可怎麼寫,人的思維和程式是不一樣的。

其實這涉及到一個樹的遍歷問題,有兩種方式可以實現

實現

方法一:逐層遍歷新增大綱

比如第一層新增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'])