Fusión y reestructuración de objetos anidados con agregación

JavaScript Hard objects

Tarea «Fusión y reestructuración de objetos anidados con agregación»

Escriba una función que reciba un array de objetos con los campos: id (número), parentId (número o null), name (cadena) y value (número). Es necesario construir un árbol, donde cada nodo contenga los campos id, name, value (suma del value de todos los nodos hijos y el propio), children (array de nodos hijos, ordenado por name en orden alfabético). La raíz es el nodo con parentId = null. Si no se encuentra parentId, el objeto se ignora. Si varios objetos tienen el mismo id, conservar solo el primero. Mostrar el árbol resultante como una cadena JSON (sin espacios). Se garantiza que existe exactamente una raíz.

Formato de entrada

La primera línea es el número N (cantidad de objetos). Luego N líneas, cada una en el formato: id parentId name value (los campos están separados por espacio, name es una cadena sin espacios).

Formato de salida

Una línea: la representación JSON del nodo raíz del árbol (con children anidados).

Ejemplos

Ejemplo 1

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