Задать вопрос
@alex999921

Как посчитать среднее значение узлов дерева?

Нужно найти среднее значение полей value, использовать чистые функции.
Перечитал много материала и не пойму как тут можно это сделать с рекурсией.
Я наверное неправильно делаю обход по объекту рекурсией, но как по-другому сделать, чтобы req(obj) возвращала поле value каждой ветки.

var obj={value:14,children:[{value:33,children:[{value:9,children:[{value:35},{value:69},{value:6}]},{value:47,children:[{value:4}]},{value:52,children:[{value:74},{value:55}]}]},{value:88,children:[{value:71,children:[{value:35}]},{value:6,children:[{value:74}]},{value:26,children:[{value:80},{value:42}]}]}]};

const fnCounter = start => {
  let counter = start;
  return () => counter++;
};

const avarageQuantity = fnCounter(0);

let sum = 0;

const req = objItem => {
  (objItem.children || []).map(req);
  sum = sum + obj.value;
  avarageQuantity();
};

req(obj);
console.log(sum / avarageQuantity());
  • Вопрос задан
  • 151 просмотр
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
  • Skillfactory
    Профессия Веб-разработчик
    12 месяцев
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Рекурсия есть:

const sumTree = tree =>
  (Array.isArray(tree) ? tree : []).reduce((acc, n) => (
    acc[0] += 1,
    acc[1] += n.value,
    sumTree(n.children).forEach((m, i) => acc[i] += m),
    acc
  ), [ 0, 0 ]);

Рекурсии нет:

const sumTree = function(tree) {
  const stack = [];
  const result = [ 0, 0 ];

  for (let [ i, arr ] = this(tree); ++i < arr.length || stack.length;) {
    if (i === arr.length) {
      [ i, arr ] = stack.pop();
    } else {
      result[0] += 1;
      result[1] += arr[i].value;

      stack.push([ i, arr ]);
      [ i, arr ] = this(arr[i].children);
    }
  }

  return result;
}.bind(x => [ -1, x instanceof Array ? x : [] ]);

Вычисляем среднее:

const [ num, sum ] = sumTree([ obj ]);
const average = sum / num;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы