public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
if (pRoot == null){
return new ArrayList<>();
}
ArrayList<ArrayList<Integer>> list = new ArrayList<>();
// 从左往右
Stack<TreeNode> first = new Stack<>();
// 从右往左
Stack<TreeNode> second = new Stack<>();
first.push(pRoot);
int flag = 1;
while (!first.isEmpty() || !second.isEmpty()){
ArrayList<Integer> curList = new ArrayList<>();
if (flag % 2 != 0){
while (!first.isEmpty()){
TreeNode curNode = first.pop();
curList.add(curNode.val);
if (curNode.left != null){
second.push(curNode.left);
}
if (curNode.right != null){
second.push(curNode.right);
}
}
}else {
while (!second.isEmpty()){
TreeNode curNode = second.pop();
curList.add(curNode.val);
if (curNode.right != null){
first.push(curNode.right);
}
if (curNode.left != null){
first.push(curNode.left);
}
}
}
flag++;
list.add(curList);
}
return list;
}