Mesclagem e reestruturação de objetos aninhados com agregação

JavaScript Hard objects

Tarefa «Mesclagem e reestruturação de objetos aninhados com agregação»

Escreva uma função que recebe um array de objetos com os campos: id (número), parentId (número ou null), name (string) e value (número). É necessário construir uma árvore, onde cada nó contém os campos id, name, value (soma do value de todos os nós filhos e do seu próprio), children (array de nós filhos, ordenado por name em ordem alfabética). A raiz é considerada o nó com parentId = null. Se parentId não for encontrado, o objeto é ignorado. Se vários objetos tiverem o mesmo id, mantenha apenas o primeiro. Exiba a árvore resultante como uma string JSON (sem espaços). É garantido que existe exatamente uma raiz.

Formato de Entrada

A primeira linha é o número N (quantidade de objetos). Em seguida, N linhas, cada uma no formato: id parentId name value (campos separados por espaço, name é uma string sem espaços).

Formato de Saída

Uma única linha — a representação JSON do nó raiz da árvore (com children aninhados).

Exemplos

Exemplo 1

ENTRADA
3 10 null A 100 20 10 B 50 30 10 C 30
SAÍDA
{"id":10,"name":"A","value":180,"children":[{"id":20,"name":"B","value":50,"children":[]},{"id":30,"name":"C","value":30,"children":[]}]}
main.js