答案 0 :(得分:1)
我使用算法和图论已经很多年了,所以如果我的答案看起来有点生疏,我会提前道歉。
Create a worklist W.
Add r, the root node, to W.
While W is not empty:
Remove the first entry from W; call it s.
For each of s's children:
Add it to W.
If s is of type B
In the graph, set s's parent to be the parent of s's children.
Remove s from the graph.
对于根节点是B类型的情况,我认为可以创建一个虚拟根(类型为<> B)作为原始根节点的父节点。虽然最终的图形仍然是连接的,但它取决于您的要求,因为需要删除虚拟根。在您的示例中,A2将是一个孤儿,并将被丢弃。但你也可能最终得到两个或多个断开的图:A2 - > A5; A3 - > A4(例如)