如何在 python 中按顺序(使用 'anytree')合并两棵树(多路树)

How to merge two trees(multi-way tree ) in order (using 'anytree') in python

如何在python中按顺序(使用'anytree')合并两棵树 将相同深度的节点按顺序(按顺序是指从左到右在相同深度的节点一个接一个)合并为一个新节点,并添加边权重。

from anytree import Node, RenderTree,LevelOrderIter,search
Root = Node(name="0", cart=0, cnt=0, goodsid='-1', parent=None)
node1 = Node(name="1", cart=0, cnt=1, goodsid='-1', parent=Root)
node2 = Node(name="2", cart=0, cnt=2, goodsid='-1', parent=Root)
node3 = Node(name="3", cart=0, cnt=3, goodsid='-1', parent=Root)
node4 = Node(name="4", cart=0, cnt=4, goodsid='-1', parent=Root)
node5 = Node(name="5", cart=0, cnt=5, goodsid='-1', parent=node1)
node6 = Node(name="6", cart=0, cnt=6, goodsid='-1', parent=node1)
node7 = Node(name="7", cart=0, cnt=7, goodsid='-1', parent=node4)
print(RenderTree(Root))
Root_1 = Node(name="a", cart=0, cnt=0, goodsid='-1', parent=None)
node_b = Node(name="b", cart=0, cnt=1, goodsid='-1', parent=Root_1)
node_c = Node(name="c", cart=0, cnt=2, goodsid='-1', parent=Root_1)
node_d = Node(name="d", cart=0, cnt=3, goodsid='-1', parent=node_b)
node_e = Node(name="e", cart=0, cnt=4, goodsid='-1', parent=node_c)
node_f = Node(name="f", cart=0, cnt=5, goodsid='-1', parent=node_c)
node_g = Node(name="g", cart=0, cnt=5, goodsid='-1', parent=node_f)
node_h = Node(name="h", cart=0, cnt=7, goodsid='-1', parent=node_g)
print(RenderTree(Root_1))

这里是两个示例树如何合并它们

我已经解决了这个问题,这与用节点和合并两个二叉树不同

def initial_node(name, cart=0, visit_cnt=1, goods_id='-1', depths=0, order_index=1, parent=None, pr=0):
    node = Node(name=name, cart=cart, visit_cnt=visit_cnt, back_cnt=0, goodsid=goods_id, depths=depths, sons_cnt=0,
                order_index=order_index,
                parent=parent, pr=pr)
    current_Node = node
    return current_Node



def list_extend(l1, l2):
    len1 = len(l1)
    len2 = len(l2)
    if len1 == len2:
        pass
    elif len1 > len2:
        l2.extend([None] * (len1 - len2))
    else:
        l1.extend([None] * (len2 - len1))
    return l1, l2


def tree_merge(node1, node2):
    res = None
    if node1 is None:
        res = node2
        res.goodsid = '-1'
        res.name = str(node2.depths) + '-' + str(node2.order_index)
        res.parent=node2.parent
        return res
    if node2 is None:
        res = node1
        res.goodsid = '-1'
        res.name = str(node1.depths) + '-' + str(node1.order_index)
        res.parent=node1.parent
        return res
    res=node1
    res.cart += node2.cart
    res.visit_cnt += node2.visit_cnt
    res.goodsid = '-1'
    children_1 = list(node1.children)
    children_2 = list(node2.children)
    children_1,children_2=list_extend(children_1,children_2)
    tmp_children=[]
    for i,j in zip(children_1,children_2):
        tmp_children.append(tree_merge(i,j))
    res.children=tmp_children
    return  res

这是用于多路树与节点值总和的合并