请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
用两个栈 一个栈是左树先进 一个栈是右树先进 一个栈弹空了才看另一个
public class Solution {
public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer> > res= new ArrayList<ArrayList<Integer> >();
if(pRoot==null)
return res;
Stack<TreeNode> stackLeft=new Stack<>();
Stack<TreeNode> stackRight=new Stack<>();
stackRight.push(pRoot);
ArrayList<Integer> tmp= new ArrayList<>();
while(!stackLeft.isEmpty()||!stackRight.isEmpty()){
if(!stackRight.isEmpty()){
while(!stackRight.isEmpty()){
TreeNode cur=stackRight.pop();
tmp.add(cur.val);
if(cur.left!=null)
stackLeft.push(cur.left);
if(cur.right!=null)
stackLeft.push(cur.right);
}
res.add(new ArrayList<Integer>(tmp));
tmp.clear();}
else{
while(!stackLeft.isEmpty()){
TreeNode cur=stackLeft.pop();
tmp.add(cur.val);
if(cur.right!=null)
stackRight.add(cur.right);
if(cur.left!=null)
stackRight.add(cur.left);
}
res.add(new ArrayList<Integer>(tmp));
tmp.clear();
}
}
return res;
}
}