JSFiddle - React, Tailwind, and code Playground

JavaScript

var solver1 = (state={sum: 0, index: 0}, hasParent=false, input) => {
  input = input || document.body.childNodes[0].innerHTML.trim().split(' ');
  if (state.index >= input.length) {
    return state.sum;
  }

  let childCount = Number(input[state.index++]);
  let metaCount = Number(input[state.index++]);

  for (let i = 0; i < childCount; i++) {
    let childRes = solver(state, true, input);
  }

  for (let i = 0; i < metaCount; i++) {
    state.sum += Number(input[state.index++]);
  } 

  if (!hasParent) {
    return solver(state, input);
  }
}
solver1();

var solver2 = (state={index: 0}, hasParent=false, input) => {
  input = input || document.body.childNodes[0].innerHTML.trim().split(' ');
  if (state.index >= input.length) {
    throw new Error('Bad Input. Exceeds bounds.')
  }

  let childCount = Number(input[state.index++]);
  let metaCount = Number(input[state.index++]);

  let childrenSum = [];
  for (let i = 0; i < childCount; i++) {
    childrenSum.push(solver2(state, true, input));
  }

  let sum = 0;
  for (let i = 0; i < metaCount; i++) {
    if (childCount === 0) {
      sum += Number(input[state.index++]);
    } else {
      let childIndex = input[state.index++];
      sum += childrenSum[childIndex - 1] || 0;
    }
  }


  return sum;
}
solver2();