1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| const graph = { value: 75, children: [{ value: 18, children: [{ value: 35, children: [{ value: 35, children: [{ value: 66, children: [{ value: 29, children: [{ value: 85 }, { value: 31, children: [{ value: 68 }, { value: 10, children: [{ value: 100, children: [{ value: 21, children: [{ value: 21 }, { value: 64 }] }, { value: 86 }] }] }] }] }, { value: 61, children: [{ value: 14, children: [{ value: 83, children: [{ value: 22, children: [{ value: 29, children: [{ value: 59 }, { value: 92 }] }, { value: 12, children: [{ value: 18 }] }, { value: 6, children: [{ value: 12 }, { value: 2 }] }] }, { value: 3, children: [{ value: 96, children: [{ value: 5 }, { value: 46 }] }] }] }, { value: 98, children: [{ value: 17, children: [{ value: 35, children: [{ value: 51 }, { value: 9 }, { value: 5 }] }] }] }, { 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 }] }] }] }] }, { value: 36, children: [{ value: 46, children: [{ value: 65, children: [{ value: 38, children: [{ value: 91 }] }, { value: 9, children: [{ value: 99 }] }] }] }] }, { value: 73, children: [{ value: 7, children: [{ value: 19 }] }, { value: 21, children: [{ value: 18, children: [{ value: 61, children: [{ value: 85 }] }, { value: 18, children: [{ value: 15 }, { value: 42 }] }] }, { value: 46, children: [{ value: 48, children: [{ value: 98 }] }, { value: 74, children: [{ value: 36 }, { value: 93 }] }] }, { value: 83, children: [{ value: 80, children: [{ value: 11 }, { value: 55 }] }, { value: 59, children: [{ value: 15 }, { value: 38 }] }] }] }, { value: 35 }] }] }, { value: 80, children: [{ value: 4 }, { value: 81, children: [{ value: 14, children: [{ value: 76, children: [{ value: 84 }, { value: 18, children: [{ value: 49 }, { value: 65 }] }] }, { value: 74, children: [{ value: 12, children: [{ value: 71 }] }, { value: 82, children: [{ value: 24 }, { value: 55 }, { value: 61 }] }] }] }] }] }] }, { value: 54, children: [{ value: 13, children: [{ value: 32, children: [{ value: 67, children: [{ value: 94 }] }] }] }, { value: 85, children: [{ value: 55, children: [{ value: 90 }, { value: 48, children: [{ value: 59, children: [{ value: 29, children: [{ value: 14 }, { value: 26 }] }, { value: 25, children: [{ value: 86 }, { value: 91 }, { value: 62 }] }] }, { value: 99, children: [{ value: 66, children: [{ value: 44 }] }, { value: 65, children: [{ value: 68 }, { value: 5 }] }] }, { value: 85, children: [{ value: 71, children: [{ value: 56 }, { value: 50 }, { value: 66 }] }] }] }, { value: 26 }] }] }] }, { value: 22, children: [{ value: 17, children: [{ value: 65 }] }] }] }, { value: 17, children: [{ value: 3, children: [{ value: 34, children: [{ value: 97 }] }, { value: 16, children: [{ value: 78, children: [{ value: 27, children: [{ value: 34, children: [{ value: 20, children: [{ value: 86 }] }, { value: 24, children: [{ value: 7 }] }] }] }] }] }, { value: 49, children: [{ value: 32, children: [{ value: 8, children: [{ value: 31, children: [{ value: 68, children: [{ value: 27 }, { value: 52 }] }, { value: 76, children: [{ value: 15 }, { value: 93 }, { value: 14 }] }] }] }, { value: 3, children: [{ value: 21, children: [{ value: 23, children: [{ value: 15 }] }] }] }] }] }] }] }, { value: 53, children: [{ value: 3, children: [{ value: 98, children: [{ value: 90, children: [{ value: 76, children: [{ value: 87, children: [{ value: 52, children: [{ value: 56 }] }] }, { value: 47 }, { value: 40, children: [{ value: 80, children: [{ value: 34 }] }, { value: 23, children: [{ value: 47 }, { value: 92 }] }, { value: 98, children: [{ value: 89 }, { value: 16 }, { value: 10 }] }] }] }, { value: 57, children: [{ value: 92, children: [{ value: 68, children: [{ value: 75 }, { value: 93 }, { value: 42 }] }, { value: 54, children: [{ value: 81 }] }] }] }] }, { value: 35, children: [{ value: 89, children: [{ value: 76, children: [{ value: 50, children: [{ value: 51 }, { value: 90 }] }, { value: 69, children: [{ value: 93 }, { value: 98 }, { value: 62 }] }] }] }] }] }] }, { value: 73, children: [{ value: 84, children: [{ value: 90, children: [{ value: 83, children: [{ value: 29, children: [{ value: 55, children: [{ value: 81 }] }] }, { value: 93, children: [{ value: 34 }, { value: 97, children: [{ value: 76 }] }, { value: 70, children: [{ value: 91 }] }] }] }, { value: 53, children: [{ value: 96, children: [{ value: 12, children: [{ value: 7 }, { value: 72 }, { value: 99 }] }] }] }] }, { value: 17, children: [{ value: 59, children: [{ value: 87, children: [{ value: 6, children: [{ value: 34 }, { value: 43 }, { value: 76 }] }, { value: 82 }, { value: 89, children: [{ value: 26 }, { value: 69 }, { value: 45 }] }] }, { value: 39, children: [{ value: 2 }] }] }] }] }, { value: 3, children: [{ value: 62, children: [{ value: 68, children: [{ value: 51 }, { value: 36, children: [{ value: 78, children: [{ value: 93 }] }] }] }, { value: 8, children: [{ value: 65, children: [{ value: 99, children: [{ value: 99 }, { value: 46 }] }] }, { value: 54, children: [{ value: 52, children: [{ value: 21 }, { value: 65 }] }] }] }] }, { value: 45, children: [{ value: 78 }] }] }] }] }] }] }, { value: 98, children: [{ value: 85 }, { value: 85, children: [{ value: 58, children: [{ value: 81, children: [{ value: 36, children: [{ value: 45, children: [{ value: 96, children: [{ value: 15, children: [{ value: 11, children: [{ value: 96 }] }] }, { value: 48, children: [{ value: 4, children: [{ value: 74 }, { value: 1 }] }, { value: 7 }] }] }, { value: 84, children: [{ value: 9 }, { value: 81, children: [{ value: 10, children: [{ value: 67 }] }] }] }] }, { value: 85, children: [{ value: 53 }, { value: 7, children: [{ value: 47, children: [{ value: 74, children: [{ value: 30 }, { value: 7 }, { value: 12 }] }, { value: 22 }] }, { value: 56, children: [{ value: 51, children: [{ value: 45 }] }, { value: 54, children: [{ value: 20 }, { value: 62 }] }] }] }] }] }] }, { value: 28, children: [{ value: 50, children: [{ value: 60, children: [{ value: 88, children: [{ value: 40 }] }, { value: 79, children: [{ value: 89, children: [{ value: 53, children: [{ value: 54 }] }, { value: 54, children: [{ value: 15 }, { value: 61 }] }] }, { value: 94, children: [{ value: 29, children: [{ value: 61 }] }] }] }] }, { value: 57, children: [{ value: 19, children: [{ value: 88, children: [{ value: 12, children: [{ value: 76 }] }, { value: 80, children: [{ value: 69 }, { value: 34 }] }] }] }, { value: 76 }, { value: 28 }] }] }] }] }, { value: 62, children: [{ value: 36, children: [{ value: 39, children: [{ value: 20 }] }, { value: 15, children: [{ value: 54, children: [{ value: 62, children: [{ value: 86, children: [{ value: 34, children: [{ value: 75 }] }, { value: 77, children: [{ value: 1 }] }, { value: 83, children: [{ value: 88 }, { value: 89 }, { value: 5 }] }] }, { value: 99, children: [{ value: 63, children: [{ value: 98 }, { value: 20 }] }] }] }, { value: 87 }] }] }, { value: 10, children: [{ value: 91, children: [{ value: 81, children: [{ value: 59, children: [{ value: 19, children: [{ value: 59 }, { value: 16 }] }, { value: 35, children: [{ value: 30 }] }, { value: 6, children: [{ value: 27 }] }] }, { value: 89, children: [{ value: 60, children: [{ value: 59 }] }] }] }] }, { value: 45, children: [{ value: 72, children: [{ value: 56, children: [{ value: 64 }, { value: 49, children: [{ value: 41 }, { value: 38 }] }] }, { value: 66, children: [{ value: 92, children: [{ value: 53 }, { value: 68 }, { value: 17 }] }, { value: 44, children: [{ value: 69 }] }] }] }] }] }] }, { value: 79, children: [{ value: 32, children: [{ value: 55, children: [{ value: 64, children: [{ value: 59, children: [{ value: 93, children: [{ value: 68 }, { value: 43 }, { value: 55 }] }, { value: 74, children: [{ value: 27 }] }] }, { value: 1, children: [{ value: 37 }, { value: 51, children: [{ value: 72 }, { value: 91 }] }] }] }] }] }, { value: 9, children: [{ value: 29, children: [{ value: 51, children: [{ value: 15, children: [{ value: 69, children: [{ value: 82 }] }, { value: 80, children: [{ value: 69 }] }] }, { value: 2, children: [{ value: 50 }, { value: 7, children: [{ value: 75 }, { value: 17 }, { value: 97 }] }] }, { value: 90, children: [{ value: 89, children: [{ value: 5 }, { value: 60 }] }, { value: 76, children: [{ value: 19 }, { value: 95 }] }] }] }] }, { value: 85 }] }] }] }, { value: 70, children: [{ value: 56, children: [{ value: 81, children: [{ value: 85, children: [{ value: 84, children: [{ value: 1 }, { value: 75, children: [{ value: 60, children: [{ value: 96 }, { value: 95 }, { value: 7 }] }, { value: 48, children: [{ value: 71 }, { value: 92 }] }] }, { value: 8, children: [{ value: 38, children: [{ value: 70 }] }] }] }, { value: 11 }] }, { value: 37, children: [{ value: 18, children: [{ value: 18 }, { value: 3 }] }, { value: 24, children: [{ value: 20, children: [{ value: 44, children: [{ value: 19 }, { value: 3 }, { value: 95 }] }] }] }] }] }] }] }] }, { value: 61, children: [{ value: 50, children: [{ value: 31, children: [{ value: 15, children: [{ value: 82, children: [{ value: 49, children: [{ value: 26, children: [{ value: 15, children: [{ value: 80 }] }, { value: 81, children: [{ value: 14 }] }] }, { value: 68, children: [{ value: 46, children: [{ value: 13 }, { value: 5 }, { value: 9 }] }, { value: 16, children: [{ value: 94 }, { value: 25 }, { value: 3 }] }] }] }] }, { value: 1, children: [{ value: 66 }] }] }] }, { value: 71, children: [{ value: 92, children: [{ value: 74, children: [{ value: 78, children: [{ value: 78 }, { value: 70, children: [{ value: 15 }, { value: 16, children: [{ value: 38 }, { value: 53 }] }, { value: 49 }] }] }] }] }] }, { value: 3 }] }, { value: 80, children: [{ value: 55, children: [{ value: 97, children: [{ value: 20, children: [{ value: 15, children: [{ value: 90, children: [{ value: 71, children: [{ value: 57 }, { value: 23 }] }, { value: 73, children: [{ value: 23 }, { value: 87 }] }] }, { value: 68 }] }, { value: 8 }] }] }, { value: 41, children: [{ value: 63, children: [{ value: 85 }, { value: 36, children: [{ value: 33, children: [{ value: 99, children: [{ value: 27 }] }, { value: 68, children: [{ value: 1 }] }, { value: 80, children: [{ value: 32 }] }] }] }, { value: 57, children: [{ value: 35, children: [{ value: 33, children: [{ value: 74 }, { value: 20 }] }, { value: 20, children: [{ value: 9 }, { value: 91 }, { value: 76 }] }, { value: 47, children: [{ value: 18 }, { value: 7 }, { value: 36 }] }] }] }] }] }] }] }] }] }, { value: 8, children: [{ value: 56, children: [{ value: 55, children: [{ value: 41, children: [{ value: 17, children: [{ value: 15, children: [{ value: 40, children: [{ value: 55, children: [{ value: 50 }, { value: 99, children: [{ value: 86 }, { value: 90 }] }] }] }, { value: 85, children: [{ value: 36, children: [{ value: 39, children: [{ value: 45 }] }] }] }, { value: 78, children: [{ value: 24, children: [{ value: 93, children: [{ value: 8 }] }, { value: 26, children: [{ value: 5 }] }] }, { value: 36 }] }] }, { value: 13 }] }, { value: 6, children: [{ value: 96, children: [{ value: 5, children: [{ value: 59, children: [{ value: 98, children: [{ value: 98 }] }] }, { value: 46, children: [{ value: 52, children: [{ value: 41 }] }, { value: 41, children: [{ value: 60 }, { value: 50 }] }] }] }] }, { value: 29, children: [{ value: 9, children: [{ value: 59, children: [{ value: 88 }, { value: 5 }] }, { value: 79, children: [{ value: 15, children: [{ value: 8 }, { value: 29 }, { value: 80 }] }] }] }] }] }] }, { value: 10, children: [{ value: 0, children: [{ value: 77, children: [{ value: 46, children: [{ value: 72, children: [{ value: 17, children: [{ value: 10 }, { value: 67 }] }, { value: 48 }, { value: 59 }] }, { value: 97, children: [{ value: 11, children: [{ value: 60 }, { value: 26 }] }] }] }] }, { value: 83, children: [{ value: 55, children: [{ value: 52, children: [{ value: 44, children: [{ value: 72 }, { value: 35 }, { value: 48 }] }] }, { value: 14, children: [{ value: 59, children: [{ value: 1 }, { value: 7 }] }] }] }, { value: 6, children: [{ value: 77, children: [{ value: 92 }, { value: 35, children: [{ value: 75 }, { value: 97 }] }, { value: 44, children: [{ value: 45 }] }] }, { value: 58, children: [{ value: 41, children: [{ value: 20 }] }, { value: 1 }] }] }] }, { value: 80, children: [{ value: 93, children: [{ value: 71, children: [{ value: 47, children: [{ value: 51 }, { value: 89 }, { value: 81 }] }, { value: 45 }, { value: 87, children: [{ value: 35 }, { value: 5 }, { value: 13 }] }] }] }, { value: 22, children: [{ value: 40, children: [{ value: 65, children: [{ value: 45 }, { value: 93 }] }, { value: 61, children: [{ value: 62 }, { value: 42 }] }, { value: 72, children: [{ value: 32 }, { value: 44 }] }] }, { value: 18, children: [{ value: 1, children: [{ value: 18 }, { value: 47 }] }] }] }] }] }] }] }] }] }] }
// Один вызов функции walk добавляет для узла из параметра значение его value в результирующий массив array
function walk(node, array = []) { // При первом запуске функции массива не было, создается пустой
array.push(node.value); // Добавить значение value из узла в массив
let children = node.children; // Массив узлов, с которыми саязан текущий узел
if (children) // Если массив узлов существует, то для каждого связанного узла из массива вызвать функцию walk()
for (let child of children) walk(child, array);
return array; // Вернуть массив с элементами value
}
function doIt(node) {
let array = walk(node); // Получить массив из value каждого узла дерева
let results = array.reduce( // В объекте поместить минимум, максимум, сумму и количество value, перебирая каждый элемент массива
(a, b) => {
if (b < a.min) a.min = b; // минимум
if (b > a.max) a.max = b; // максимум
a.sum += b; // сумму
++a.count; // количество
return a;
},
{ min: Infinity, max: -Infinity, sum: 0, count: 0 } // Объект, в котором копится минимум, максимум, сумму и количество value
);
return results; // Вернуть объект, в котором минимум, максимум, сумму и количество value
}
let results = doIt(graph);
console.log(`Узел графа с минимальным значением value: ${results.min}
Узел графа с максимальным значением value: ${results.max}
Среднее значение всех узлов графа: ${results.sum / results.count}`); |