题目

给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。

例如:
给定二叉树 [3,9,20,null,null,15,7],

  1. 3<br /> / \<br /> 9 20<br /> / \<br /> 15 7<br />返回锯齿形层序遍历如下:

[
[3],
[20,9],
[15,7]
]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


题解

1.层序遍历
显然,用层序遍历最简单

var zigzagLevelOrder = function (root) {
    // 层序遍历
    if (!root) {
        return []
    }
    const queue = [root],
        res = []
    let flag = -1
    while (queue.length > 0) {
        let len = queue.length
        let temp = []
        flag = -flag
        while (len > 0) {
            const node = queue.pop()
            temp.push(node.val)
            if (node.left) {
                queue.unshift(node.left)
            }
            if (node.right) {
                queue.unshift(node.right)
            }
            len--
        }
        if (flag > 0) {
            res.push(temp)
        } else {
            // console.log(temp, temp.reverse())
            res.push(temp.reverse())
        }
    }
    return res
};

2.优化
方向已知,temp长度已知,直接在temp数组里面赋值就行