按之字形顺序打印二叉树(层级遍历,正反队列,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 };