题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。删除线格式
代码思路
- 层序遍历和栈(先进后出)实现
- 定义变量layer控制层数
- 定义两个栈stack1和stack2分别保存奇数层和偶数层结点
- 对于奇数层结点的进栈顺序应该是先右孩子然后左孩子
代码实现
/* function TreeNode(x) {
this.val = x;
this.left = null;
this.right = null;
} */
function Print(pRoot)
{
// write code here
let res=[];
if(!pRoot){
return res;
}
let layer=1;//控制层数
let stack1=[];//存放奇数层结点
let stack2=[];//存放偶数层结点
stack1.push(pRoot);
let temp=[];
while(stack1.length>0 || stack2.length>0){
if(layer%2 != 0){
while(stack1.length>0){
let node=stack1.pop();
temp.push(node.val);
if(node.left){
stack2.push(node.left);
}
if(node.right){
stack2.push(node.right);
}
}
}
if(layer%2 == 0){
while(stack2.length>0){
let node=stack2.pop();
temp.push(node.val);
if(node.right){
stack1.push(node.right);
}
if(node.left){
stack1.push(node.left);
}
}
}
res.push(temp);
temp=[];
layer++;
}
return res;
}