【Leetcode】103.二叉树的锯齿形层序遍历

26 阅读1分钟

leetcode-103.png

这也是一题比较典型的层次遍历,但是不同的是,这里的层次的顺序不是每次都是正序,而是一正一反相互交替。

解法

这里需要记录一个标记,记录正反即可。之前我们层次遍历都是在每一层之中进行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
};