Skip to content

Commit f86c33f

Browse files
committed
create tree_detour_js
1 parent 745bf5e commit f86c33f

File tree

2 files changed

+126
-0
lines changed

2 files changed

+126
-0
lines changed

javascript/tree_detour.js

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
const { getTree } = require("./utils");
2+
3+
/**
4+
* @description - Простейший алгоритм обхода дерево в двух форматах рекурсия и итеративная. Сложность такого алгоритм O(n)
5+
* Работа строится таким образом, чтобы найти каждый элемент child некоторого value и найти value этого child.
6+
* @param {Array} tree
7+
*
8+
* @description iteration - Для реализации итеративного подхода используется структура данных "стек" - представляющая из себя упорядоченный набор элементов,
9+
* в которой добавление новых элементов и удаление существующих производится с одного конца, называемого вершиной стека.
10+
*
11+
* В нашем случае функция getTree вернет структуру дерева с бесконечным количеством узлов(node), в коде используется как bit (частица) структуры.
12+
*/
13+
14+
const iteration = (tree) => {
15+
if (!tree.length) {
16+
return 0
17+
}
18+
let sum = 0
19+
let stack = []
20+
tree.forEach(bit => stack.push(bit));
21+
while (stack.length) {
22+
const bit = stack.pop()
23+
sum += bit.value
24+
if (bit.child) {
25+
bit.child.forEach(child => stack.push(child))
26+
}
27+
}
28+
return sum
29+
}
30+
31+
const recursive = (tree) => {
32+
let sum = 0;
33+
tree.forEach(bit => {
34+
sum += bit.value
35+
if (!bit.child) {
36+
return bit.value
37+
}
38+
sum += recursive(bit.child)
39+
})
40+
return sum
41+
}
42+
43+
console.log(recursive(getTree()))
44+
console.log(iteration(getTree()))

javascript/utils.js

+82
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,86 @@ module.exports.getGraphDijkstra = () => {
3535
[6, MAX_INTEGER, MAX_INTEGER, 1, MIN_INTEGER]
3636
]
3737
}
38+
}
39+
40+
module.exports.getTree = () => {
41+
return [
42+
{
43+
value: 13,
44+
child: [
45+
{
46+
value: 7,
47+
child: [
48+
{
49+
value: 35,
50+
}
51+
]
52+
},
53+
{
54+
value: 31,
55+
child: [
56+
{
57+
value: 8,
58+
child: [
59+
{
60+
value: 646,
61+
child: [
62+
{
63+
value: 13
64+
},
65+
{
66+
value: 55
67+
}
68+
]
69+
}
70+
]
71+
}
72+
]
73+
}
74+
]
75+
},
76+
{
77+
value: 13,
78+
child: [
79+
{
80+
value: 13,
81+
child: [
82+
{
83+
value: 13,
84+
child: [
85+
{
86+
value: 13
87+
},
88+
{
89+
value: 55,
90+
child: [
91+
{
92+
value: 13
93+
},
94+
{
95+
value: 55,
96+
child: [
97+
{
98+
value: 13
99+
},
100+
{
101+
value: 55
102+
}
103+
]
104+
}
105+
]
106+
}
107+
]
108+
},
109+
{
110+
value: 55
111+
}
112+
]
113+
},
114+
{
115+
value: 55
116+
}
117+
]
118+
}
119+
]
38120
}

0 commit comments

Comments
 (0)