如何在python中按顺序(使用“anytree”)合并两棵树(多路树)
如何在python中使用“anytree”按顺序合并两棵树 按顺序合并相同深度的节点按顺序是指从左到右将相同深度的节点逐个合并到一个新节点,并添加边权重。如何在python中按顺序(使用“anytree”)合并两棵树(多路树),python,algorithm,data-structures,tree,graph-algorithm,Python,Algorithm,Data Structures,Tree,Graph Algorithm,如何在python中使用“anytree”按顺序合并两棵树 按顺序合并相同深度的节点按顺序是指从左到右将相同深度的节点逐个合并到一个新节点,并添加边权重。 这是两个示例树如何合并它们我已经解决了这个问题,这不同于用节点和合并两个二叉树 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,
这是两个示例树如何合并它们我已经解决了这个问题,这不同于用节点和合并两个二叉树
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
这是用于具有节点值和的多路树合并您自己尝试过什么吗?你应该自己尝试一下,然后在这里问你是否卡住了,所以他不是来帮你做这项工作的。我试图分析用户的页面细节视图传输条件,每个树代表一个用户的条件我必须合并到一个整体条件树中以计算视图购买转换率我已经构建了每个树,我被困在逻辑中如何合并在这种情况下你应该提供一个。如果没有任何代码,我们将不得不猜测你是如何构建这些树的。thx,我已经编辑了我的问题
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