-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtree_detour.js
44 lines (40 loc) · 1.78 KB
/
tree_detour.js
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
const { getTree } = require("./utils");
/**
* @description - Простейший алгоритм обхода дерево в двух форматах рекурсия и итеративная. Сложность такого алгоритм O(n)
* Работа строится таким образом, чтобы найти каждый элемент child некоторого value и найти value этого child.
* @param {Array} tree
*
* @description iteration - Для реализации итеративного подхода используется структура данных "стек" - представляющая из себя упорядоченный набор элементов,
* в которой добавление новых элементов и удаление существующих производится с одного конца, называемого вершиной стека.
*
* В нашем случае функция getTree вернет структуру дерева с бесконечным количеством узлов(node), в коде используется как bit (частица) структуры.
*/
const iteration = (tree) => {
if (!tree.length) {
return 0
}
let sum = 0
let stack = []
tree.forEach(bit => stack.push(bit));
while (stack.length) {
const bit = stack.pop()
sum += bit.value
if (bit.child) {
bit.child.forEach(child => stack.push(child))
}
}
return sum
}
const recursive = (tree) => {
let sum = 0;
tree.forEach(bit => {
sum += bit.value
if (!bit.child) {
return bit.value
}
sum += recursive(bit.child)
})
return sum
}
console.log(recursive(getTree()))
console.log(iteration(getTree()))