1. 程式人生 > >Python的treelib構建多叉樹——樹剪枝

Python的treelib構建多叉樹——樹剪枝

採用什麼樣的方式怎樣剪枝,下面是按照我的需求進行的剪枝,具體怎麼剪,還是要根據需求。

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