# 蛇形遍历
// 输入
const initTree = {
value: 1,
left: {
value: 2,
left: {
value: 4,
left: {
value: 8
},
right: {
value: 9
}
},
right: {
value: 5
}
},
right: {
value: 3,
left: {
value: 6
},
right: {
value: 7,
left: {
value: 10
}
}
}
}
// 输出
1
3 2
4 5 6 7
10 9 8
snake(initTree)
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
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
function snake(tree) {
const queue = []
const AllLevel = []
tree.level = 0
queue.push(tree)
while (queue.length) {
const item = queue.shift()
const itemLevel = item.level
if (item.left) {
item.left.level = itemLevel + 1
queue.push(item.left)
}
if (item.right) {
item.right.level = itemLevel + 1
queue.push(item.right)
}
if (!AllLevel[itemLevel]) {
AllLevel[itemLevel] = []
}
AllLevel[itemLevel].push(item.value)
}
AllLevel.forEach((level, idx) => {
const newLevel = idx % 2 === 0 ? level : level.reverse()
newLevel.forEach(item => {
console.log(item)
})
})
}
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
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