<p>根据需要,此解决方案不考虑节点的顺序。</p>
<pre><code>a = [(1, 1), (2, 1), (3, 1), (4, 3), (5, 3), (6, 3), (7, 7), (8, 7), (9, 7)]
b = [(8, 7), (5, 3), (2, 1), (1, 1), (3, 1), (7, 7), (4, 3), (6, 3), (9, 7)]
def build_forest( nodelist ):
forest = []
nodes = {}
id = 'id'
children = 'children'
for node_id, parent_id in nodelist:
#create current node if necessary
if not node_id in nodes:
node = { id : node_id }
nodes[node_id] = node
else:
node = nodes[node_id]
if node_id == parent_id:
#add node to forrest
forest.append( node )
else:
#create parent node if necessary
if not parent_id in nodes:
parent = { id : parent_id }
nodes[parent_id] = parent
else:
parent = nodes[parent_id]
#create children if necessary
if not children in parent:
parent[children] = []
#add node to children of parent
parent[children].append( node )
return forest
print( build_forest( a ) )
print( build_forest( b ) )
</code></pre>