剑指Offer(二叉树)-之字形打印二叉树
题目描述:
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
下图借鉴一位牛客网的同学的做法:
import java.util.ArrayList; import java.util.Stack; /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> result = new ArrayList<>(); if(pRoot==null){ return result; } Stack<TreeNode> stack1 = new Stack<>(); Stack<TreeNode> stack2 = new Stack<>(); stack1.add(pRoot); while(stack1.size()>0||stack2.size()>0){ ArrayList<Integer> nodeArrayList = new ArrayList<>(); if(stack1.size()>0){ int size = stack1.size(); for(int i=0;i<size;i++){ TreeNode p = stack1.pop(); nodeArrayList.add(p.val); if(p.left!=null){ stack2.add(p.left); } if(p.right!=null){ stack2.add(p.right); } } result.add(nodeArrayList); continue; } if(stack2.size()>0){ int size = stack2.size(); for(int i=0;i<size;i++){ TreeNode p = stack2.pop(); nodeArrayList.add(p.val); if(p.right!=null){ stack1.add(p.right); } if(p.left!=null){ stack1.add(p.left); } } result.add(nodeArrayList); continue; } } return result; } }