Вам придется отслеживать текущее вложение.Для этого вы можете использовать стек.
Каждый раз, когда вы сталкиваетесь с {
(за которым следует имя узла), вы знаете, что это начало нового узла.Этот новый узел является дочерним по отношению к текущему узлу.
Каждый раз, когда вы сталкиваетесь с }
, вы знаете, что текущий узел завершен, а это означает, что вы должны сообщить своей программе, что текущий узел теперь заменен на родителя текущего узла.
Пример:
{A{B{C}{D}{E}}{F{G}{H}}} Stack:
^
{A{B{C}{D}{E}}{F{G}{H}}} Stack: A // A is root
^
{A{B{C}{D}{E}}{F{G}{H}}} Stack: A, B // B is child of A
^
{A{B{C}{D}{E}}{F{G}{H}}} Stack: A, B, C // C is child of B
^
{A{B{C}{D}{E}}{F{G}{H}}} Stack: A, B, // C has no child, C done
^
{A{B{C}{D}{E}}{F{G}{H}}} Stack: A, B, D // D is child of B
^
{A{B{C}{D}{E}}{F{G}{H}}} Stack: A, B,
^
{A{B{C}{D}{E}}{F{G}{H}}} Stack: A, B, E // E child of B
^
{A{B{C}{D}{E}}{F{G}{H}}} Stack: A, B,
^
{A{B{C}{D}{E}}{F{G}{H}}} Stack: A, // B has no more children, B done
^
{A{B{C}{D}{E}}{F{G}{H}}} Stack: A, F // F child of A
^
{A{B{C}{D}{E}}{F{G}{H}}} Stack: A, F, G // G child of F
^
{A{B{C}{D}{E}}{F{G}{H}}} Stack: A, F,
^
{A{B{C}{D}{E}}{F{G}{H}}} Stack: A, F, H
^
{A{B{C}{D}{E}}{F{G}{H}}} Stack: A, F,
^
{A{B{C}{D}{E}}{F{G}{H}}} Stack: A,
^
{A{B{C}{D}{E}}{F{G}{H}}} Stack:
^
DONE.