Ваша проблема станет намного проще, если вы немного изменили структуру JSON.
Для каждого узла сохраните родителя каждого узла и его непосредственных потомков.
Новая структура JSON
[
{"id": "a", "parent": null, "children" : ["b", "c", "d", "e"] },
{"id": "b", "parent": "a", "children" : ["f", "g"]},
{"id": "c", "parent": "a", "children" : ["h"]},
{"id": "d", "parent": "a", "children" : []},
{"id": "e", "parent": "a", "children" : ["i", "j", "k"]}
]
Алгоритм
Допустим, ваш целевой узел e
.
Теперь все, что вам нужно сделать, это изменить родителей ближайших детей e
на a
, поскольку a
является родителем e
. А затем удалите e
.
Это сохранит структуру поддеревьев дочерних элементов e
. Если вы не хотите этого, вы должны рекурсивно назначить a
в качестве родителя для всех потомков e
, а не только для ближайших.