leetcode | 103. 二叉树的锯齿形层序遍历 | JavaScript实现

题目

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

思路

按照正常的层序遍历,然后再对下标为奇数的数组进行逆置
然后对于不同层,数组可以选择前插或者后插,以此来满足锯齿形的条件

代码

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[][]}
 */
var zigzagLevelOrder = function(root) {
    let queue = []; // 队列
    let res = []; // 返回
    let seq = false;
    let nextLayer = 0; // 记录下一层的节点数
    let curLayer = 0; // 当前层节点数
    let layer = []; 

    if (root) {
        queue.push(root);
        curLayer++;
    }
    while(queue.length) {
        let front = queue.shift();
        if (!seq)   
            layer.push(front.val);
        else layer.unshift(front.val);
        
        if (front.left) {
            queue.push(front.left);
            nextLayer++;
        }
        if (front.right) {
            queue.push(front.right);
            nextLayer++;
        }

        if (--curLayer === 0) {
            // 到下一层
            curLayer = nextLayer;
            nextLayer = 0;
            res.push(layer);
            layer = new Array();
            seq = !seq;
        }

    }
    return res;
};
posted @ 2022-01-22 16:44  azoux  阅读(36)  评论(0编辑  收藏  举报