思想就是:为保证多叉树节点的唯一性,主要就是根据嵌套list,构建对应的节点id
首先,将嵌套list的第一个list元素,作为第一个list的元素节点的id ;
其次,为了保证节点的命名不重复,建立一个字典来统计各个节点的出现次数 ;
若有同一棵树上不在路径的子树相同,怎么知道将该字数放到哪个节点下面呢?
很简单,就是建立临时path,从当前list的第一个元素与之前的list相同位置元素进行比较,若第一个元素相同,则将对应的list抽出放到path,当前list节点命名与path中的同位置相同元素一样,若不同,则将id命名为该元素与其当前计数的拼接str。
def encoding_tree_node_id(temps):
# first template的值直接作为其id
temps_id = [temps[0]]
# 构建一个id计数器以对其节点id进行命名
id_count_dict = dict(zip(temps_id[0],[1]*len(temps_id[0])))
# Template总数
len_temps = len(temps)
# encoding id begin
for i in range(1,len_temps):
temp_path = [] # 将符合条件的temp存入临时path
temp_path_loc = [] # 记录临时path在原始temps中的位置
len_current_list = len(temps[i])
for xi in temps[i]:
if xi in id_count_dict.keys():
id_count_dict[xi] = id_count_dict[xi] + 1
else:
id_count_dict[xi] = 1
for k in range(len_current_list):
if k == 0:
for j in range(i):
if temps[i][k