Шаблон или алгоритм объединения ветвей в древовидную структуру?

Я пытаюсь отобразить DAG (направленный ациклический граф) в структуру, которую я показываю ниже.

Вот пример DAG, с которого я начинаю

где дуги всегда идут слева направо.

Затем я возвращаю график и делю его на дерево с повторяющимися узлами, например так:

То, что я ищу, это какой-то алгоритм или шаблон для достижения следующей объединенной структуры. (Обратите внимание, что это снова возвращается)

Цель состоит в том, чтобы сгенерировать XML следующим образом:


    
        
        
            
                
                
            
            
                
                    
                        
                            
                            
                        
                        
                    
                    
                        
                            
                            
                            
                        
                        
                    
                
                
            
        
    

Я нене думаю, что этоуместно, но я разбираю JSON для написания XML с JAVA 7. Ящики - это веб-сервисы, а стрелки представляют входные и выходные параметры, поэтому, например, модуль 5 вызывается после завершения работы модулей 1,2,3 и 4 и их вывода являются его входами.

РЕДАКТИРОВАТЬ: Хорошо, вот еще один пример с десятью узлами. Я надеюсь, что это даст вам лучшее понимание того, когда I узлы должны быть объединены.

Чтобы ответить @blubb, в этом примере мы можем увидеть, как "услуги "8 & 9 также были объединены. В противном случае все службы, которые им нужны для работы (1,2,3,4,5 и 6), будут вызываться дважды без необходимости. Средняя ветвь в последнем эскизе будет выполнена дважды: один раз для 8 и один раз для 9.

Ответы на вопрос(2)

Ваш ответ на вопрос