LeetCode 103 - 二叉树的锯齿形层次遍历 - JavaScript

1、题目描述

给定一个二叉树,返回其节点值的锯齿形层次遍历。

即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行。

例如:给定二叉树 [3,9,20,null,null,15,7],返回锯齿形层次遍历如下:

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

2、解题思路

树的广度遍历+队列相关知识:

  • 广度遍历树的每一层级
  • 当遍历到奇数层级时,顺序推入数组
  • 当遍历到偶数层级时,逆序推入数组
var zigzagLevelOrder = function(root) {
    let result = [];
    if(!root) return result;    //判空操作

    let list = [];
    list.push({level:0, node:root});    //新增一个level属性,标记当前节点的层级

    while(list.length > 0){
        const {level, node} = list.shift();  //返回数组原来的第一个元素的值
        if(!result[level]){
            result[level] = [];
        }
        
        if(level % 2 === 0){  //顺序推入
            result[level].push(node.val);   //push()向数组末尾添加一个或多个元素,并返回新的长度
        }else {  //逆序推入
            result[level].unshift(node.val);   //unshift()向数组的开头添加一个多个元素,并返回新的长度
        }
        
        node.left && list.push({level:level + 1, node:node.left});
        node.right && list.push({level:level +1, node:node.right});
    }

    return result;
};

你可能感兴趣的:(Algorithm)