-
Notifications
You must be signed in to change notification settings - Fork 1
/
103.二叉树的锯齿形层次遍历.js
83 lines (72 loc) · 2.32 KB
/
103.二叉树的锯齿形层次遍历.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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/**
* 2种思路
* 1. 双队列,一个队列里寸奇数,一个队列里存偶数
* 2. 利用 push 和 unshift 来达到相反的效果
*/
// var zigzagLevelOrder = function(root) {
// if (!root) {
// return []
// }
// const stack = [{ ...root, level: 0 }]
// const stackMirror = [{ ...root, level: 0 }]
// let num = 0
// const result = []
// const get = (node, nodeMirror) => {
// if (node || nodeMirror) {
// const level = node ? node.level : nodeMirror.level
// const nextLevel = level + 1
// if (!result[level]) {
// result[level] = []
// }
// result[level].push(level % 2 ? nodeMirror.val : node.val)
// if (node.left) {
// stack.push({ ...node.left, level: nextLevel })
// }
// if (node.right) {
// stack.push({ ...node.right, level: nextLevel })
// }
// if (nodeMirror.right) {
// stackMirror.push({ ...nodeMirror.right, level: nextLevel })
// }
// if (nodeMirror.left) {
// stackMirror.push({ ...nodeMirror.left, level: nextLevel })
// }
// num++
// if (num <= stack.length) {
// get(stack[num], stackMirror[num])
// }
// }
// }
// get(stack[num], stackMirror[num])
// return result
// };
var zigzagLevelOrder = function(root) {
if (!root) {
return []
}
const stack = [{ ...root, level: 0 }]
let num = 0
const result = []
const get = (node) => {
if (node) {
const level = node.level
const nextLevel = level + 1
if (!result[level]) {
result[level] = []
}
level % 2 ? result[level].unshift(node.val) : result[level].push(node.val)
if (node.left) {
stack.push({ ...node.left, level: nextLevel })
}
if (node.right) {
stack.push({ ...node.right, level: nextLevel })
}
num++
if (num <= stack.length) {
get(stack[num])
}
}
}
get(stack[num])
return result
};