题目描述:
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
实现思路:广搜的思想,使用两个栈实现,奇数行:从左->右打印,在打印奇数行时,将其子节点按照先左后右的顺序添加到另一个栈中;偶数行:从右->左打印,在打印偶数行时,将其子节点按照先右后左的顺序添加到奇数栈中。
/* function TreeNode(x) {
this.val = x;
this.left = null;
this.right = null;
} */
function Print(pRoot)
{
const res = [];
// write code here
if(pRoot === null){
return res;
}
const queue = [];
const stack = [];
queue.push(pRoot);
let layer = 1;
while(queue.length !== 0 || stack.length !== 0){
let row = [];
//奇数层 左->右遍历 队列存储
if(layer%2){
while(queue.length !==0 ){
const item = queue.pop();
row.push(item.val);
if(item.left !== null)stack.push(item.left);
if(item.right !== null)stack.push(item.right);
}
}else {
//偶数层,从右->左遍历 栈存储
while(stack.length !== 0) {
const item = stack.pop();
row.push(item.val);
if(item.right !== null)queue.push(item.right);
if(item.left !== null)queue.push(item.left);
}
}
layer++;
res.push(row);
}
return res;
}
注意:使用尽量const而不是let、var,否则可能会出现内存超出的现象,原因请参考我的另一篇博文const>let>var