Python的treelib構建多叉樹——樹剪枝
阿新 • • 發佈:2018-11-08
採用什麼樣的方式怎樣剪枝,下面是按照我的需求進行的剪枝,具體怎麼剪,還是要根據需求。
def cut_tree(tree):
# find all leaves's node
all_leaves = tree.leaves()
# find all ids of leaves's node
all_leaves_id = [ str(x).split(',')[1].split('=')[1] for x in all_leaves]
for leaf_id in all_leaves_id:
get_leaf_siblings = tree.siblings(leaf_id)
siblings_id_list = []
if get_leaf_siblings == []:
all_leaves_id.remove(leaf_id)
else:
siblings_id_list.append(leaf_id)
for get_leaf_sibling in get_leaf_siblings:
siblings_id_list.append( str(get_leaf_sibling) .split(',')[1].split('=')[1] )
siblings_is_leaves = list(set(siblings_id_list) & set(all_leaves_id))
if siblings_is_leaves == []:
all_leaves_id.remove(leaf_id)
else:
# 葉子節點的父親節點有兄弟,刪除葉子
get_leaf_parent = tree.parent( leaf_id)
get_leaf_parent_id = str(get_leaf_parent).split(',')[1].split('=')[1]
if tree.depth(leaf_id) > 3 and tree.siblings(get_leaf_parent_id) != []:
for siblings_id in siblings_is_leaves:
tree.remove_node( siblings_id) # 刪除葉子節點
all_leaves_id.remove(siblings_id)
else:
for siblings_id in siblings_is_leaves:
all_leaves_id.remove(siblings_id)
return tree