按之字形顺序打印二叉树(层级遍历,正反队列,JS)
按之字形顺序打印二叉树
http://www.nowcoder.com/questionTerminal/91b69814117f4e8097390d107d2efbe0
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
主要还是一个二叉树层级遍历的思路,可参考下方链接:
https://blog.csdn.net/romeo12334/article/details/81335488
思路:
奇数层:取队头,将左右节点插入队尾中,将值插入level数组中,相当于从左到右遍历,
偶数层:取队尾,将其右节点插入队头,再将左节点插入队头,将队尾值插入level数组中,相当于从右到左遍历
主要就是将队列当作双向出口,队头出来的就是从左到右,那么队尾出来的就是从右到左
/* function TreeNode(x) {
this.val = x;
this.left = null;
this.right = null;
} */
function Print(pRoot)
{
// write code here
let result = []
let queue = []
let count = 1
if(pRoot != null){
queue.push(pRoot)
}
while(queue.length !== 0) {
let len = queue.length
let level = []
for(let i=0;i<len;i++){
let cNode = null
if(count%2==1){
cNode = queue.shift()
level.push(cNode.val)
if(cNode.left != null)queue.push(cNode.left)
if(cNode.right != null)queue.push(cNode.right)
}else{
cNode = queue.pop()
level.push(cNode.val)
if(cNode.right != null)queue.unshift(cNode.right)
if(cNode.left != null)queue.unshift(cNode.left)
}
}
count++;
result.push(level)
}
return result;
}
module.exports = {
Print : Print
};
查看3道真题和解析