Цитата:
каждую рекурсивную задачу можно переписать на цикл и стек, но будет мутный говнокод |
Poznakomlus,
пост#8 в строке 13 поменяйте 29 на 1. |
Извиняюсь, если это был глупый вопрос. Спасибо, пойду дальше разбираться :thanks:
|
Цитата:
|
Цитата:
<script> const graph = { value: 65, children: [{ value: 15, children: [{ value: 55, children: [{ value: 85, children: [{ value: 66, children: [{ value: 1 }, { value: 21 }] }] }, {value: -30}] }] }, { value: -1 }] }; const tree = data => { let arr = [], cur while (data.children && (cur = data.children.pop())) { arr = arr.concat(tree(cur)) } return arr.concat(data.value) } const arr = tree(graph) document.write(`Min: ${Math.min(...arr)}, Max: ${Math.max(...arr)}`) //var tree=function(a){for(var b=[],c;a.children&&(c=a.children.pop());)b=b.concat(tree(c));return b.concat(a.value)}; </script> |
Я сделал нахождение среднего значение таким образом:
const average = (graph) => { return sum(graph) / count(graph); }; const sum = (graph) => { return graph.children ? graph.children.map(sum).reduce((item1, item2) => item1 + item2, graph.value) : graph.value; } const count = (graph) => { return graph.children ? graph.children.map(count).reduce((item1, item2) => { return item2.value ? (item1++, item1) : item1 += item2; }, 1) : graph; }; Можно ли сделать это одной функцией(один проход по дереву)? |
function average({ value, children = [] }, result = { sum: 0, count: 0 }) { result.sum += value; result.count++; for(const child of children) average(child, result); return result.sum / result.count; } |
Часовой пояс GMT +3, время: 20:48. |