答案 0 :(得分:3)
以下递归算法可以解决您的问题。请注意,您的输入图形实际上不是树,而是DAG(但是,该算法也适用于DAG)。我假设您的DAG为topologically sorted,并且您将DAG的根提供给group
函数。如果您的DAG未按拓扑排序,则应首先执行拓扑排序,可以使用DFS以线性时间进行。
group(dag_node):
if dag_node.num_children == 0:
new_node = new DagNode(dag_node.value)
if dag_node.num_children > 1:
new_node = new DagNode(dag_node.value)
new_node.children = [group(child) for child in dag_node.children]
if tree_node.num_children == 1:
value_pair = (dag_node.value, dag_node.children[0].value)
new_node = new DagNode(value_pair)
new_node.children = dag_node.children[0].children
new_node = group(new_node)
return new_node