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>> res=new ArrayList<>(); ArrayList<Integer> list=new ArrayList<>(); if(pRoot==null){ return res; } Stack<TreeNode> stack1=new Stack<>(); Stack<TreeNode> stack2=new Stack<>(); stack1.push(pRoot); while(!stack1.isEmpty() || !stack2.isEmpty()){ //奇數行的結果 while(!stack1.isEmpty()){ TreeNode node=stack1.pop(); list.add(node.val); if(node.left!=null){ stack2.push(node.left); } if(node.right!=null){ stack2.push(node.right); } } //保留結果 if(list.size()>0){ res.add(list); } list=new ArrayList<Integer>(); //偶數行的結果 while(!stack2.isEmpty()){ TreeNode node=stack2.pop(); list.add(node.val); if(node.right!=null){ stack1.push(node.right); } if(node.left!=null){ stack1.push(node.left); } } //保留結果 if(list.size()>0){ res.add(list); } list=new ArrayList<Integer>(); } return res; } }