Как обойти все дерево через array.prototype.reduce?
const traversal = (arr, prevKey, key) => arr.map((o) => {
  const newObj = {
    ...o, 
    [key]: o[prevKey], 
    children: traversal(o.children, prevKey, key)
  }; 
  delete newObj[prevKey];
  return newObj;
});

const newArr = traversal(data, 'name', 'key');
P.S. ваш код не работает из-за опечатки в названии свойства в последнем объекте
const traversal = (arr, prevKey, key) => arr.map((o) => {
  const newObj = {
    ...o, 
    [key]: o[prevKey], 
    children: traversal(o.children, prevKey, key)
  }; 
  delete newObj[prevKey];
  return newObj;
});

const newArr = traversal(data, 'name', 'key');
P.S. ваш код не работает из-за опечатки в названии свойства в последнем объекте