题目:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
分析:方法一 建立2个栈,s1放基数层,s2放偶数层 temp为临时存放每一层的数值的链表
int level=1;
Stack<TreeNode> s1=new Stack<TreeNode>();
s1.add(pRoot);
Stack<TreeNode> s2=new Stack<TreeNode>();
ArrayList<ArrayList<Integer>> list= new ArrayList<ArrayList<Integer>>();
while(!s1.isEmpty()||!s2.isEmpty()){
if(level%2!=0){
ArrayList<Integer> temp=new ArrayList<Integer>();
while(!s1.isEmpty()){
TreeNode node=s1.pop();
if(node!=null){
temp.add(node.val);
s2.add(node.left);
s2.add(node.right);
}
}
if(!temp.isEmpty()){
list.add(temp);
level++;
}
}
else{
ArrayList<Integer> temp=new ArrayList<Integer>();
while(!s2.isEmpty()){
TreeNode node=s2.pop();
if(node!=null){
temp.add(node.val);
s1.add(node.right);
s1.add(node.left);
}
}
if(!temp.isEmpty()){
list.add(temp);
level++;
}
}
}
return list;
参考:https://blog.csdn.net/ouyangyanlan/article/details/72878992
拓展:用之字形打印矩阵