二叉树的锯齿形层次遍历
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
例如: 给定二叉树 [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
};