LeetCode二叉树的锯齿形层次遍历(JavaScript实现)

二叉树的锯齿形层次遍历

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

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

 3    
/ \   
9  20
   /  \   
   15   7

返回锯齿形层次遍历如下:

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

解题思路

树的广度遍历+队列相关知识:
1.广度遍历树的每一层级
2.当遍历到奇数层级时,顺序推入数组
3.当遍历到偶数层级时,逆序推入数组

JavaScript代码如下:

var zigzagLevelOrder = function(root) {
    const printArr = []
    if(!root){
        return printArr
    }
    const list = []
    list.push({level:0,node:root})
    while(list.length>0){
        const{level,node} = list.shift()//返回数组原来的第一个元素的值
        if(!printArr[level]){
            printArr[level] = []
        }
        
        if(level % 2 == 0){
            //顺序推入
            printArr[level].push(node.val)//push()向数组末尾添加一个或多个元素,并返回新的长度
        }else{
            //逆序推入
            printArr[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 printArr
};
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页