这也是一题比较典型的层次遍历,但是不同的是,这里的层次的顺序不是每次都是正序,而是一正一反相互交替。
解法
这里需要记录一个标记,记录正反即可。之前我们层次遍历都是在每一层之中进行push,这里的push就是在数组尾部放入一个元素。现在我们需要根据不同的情况来判断在尾部还是首部来放入元素。在首部放入元素的api是 unshift 。
var zigzagLevelOrder = function (root) {
if (!root) return []
let queue = [root]
let directionFlag = true
let res = []
while (queue.length) {
let size = queue.length
let level = []
for (let i = 0; i < size; ++i) {
let node = queue.shift()
if (directionFlag) {
level.push(node.val)
} else {
level.unshift(node.val)
}
if (node.left) queue.push(node.left)
if (node.right) queue.push(node.right)
}
directionFlag = !directionFlag
res.push(level)
}
return res
};