如何給樹型結構新增大綱目錄索引
阿新 • • 發佈:2021-07-13
目錄
需求
我們有如下的樹型結構
想統一給這樣的資料,新增目錄索引,變成這樣
我們知道從人眼看,只需要從上到下掃描就行了,可這要放在程式中可怎麼寫,人的思維和程式是不一樣的。
其實這涉及到一個樹的遍歷問題,有兩種方式可以實現
實現
方法一:逐層遍歷新增大綱
比如第一層新增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'])