题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
代码
思路:按深度遍历二叉树,深度(从0开始)为奇数的反转加入数组。
function Print(pRoot)
{
// write code here
var queue = [];//存储节点队列
var result = [];
if(pRoot==null) return result;
var nextLevel = 0;
queue.push(pRoot);
var toBePrinted = 1;//每一行节点个数
var level = 0;//深度
var arr = [];
while(queue.length){
var temp = queue.shift();
toBePrinted--;
arr.push(temp.val);
if(temp.left){
queue.push(temp.left);
nextLevel++;
}
if(temp.right){
queue.push(temp.right);
nextLevel++;
}
if(toBePrinted==0){
toBePrinted=nextLevel;
nextLevel=0;
level++;
if(level%2==0){
arr.reverse();
}
result.push(arr);
arr = [];
}
}
return result;
}