import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; 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 > Print(TreeNode pRoot) { ArrayList<ArrayList> list = new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();
Stack<TreeNode> stack = new Stack<>();
queue.add(pRoot);
ArrayList<Integer> list1;
boolean flag = true;
while(queue.peek() != null) {
int qSize = queue.size();
if(!flag) {
list1 = new ArrayList<>();
for(int i = 0;i < qSize;i++) {
if(queue.peek().left != null) {
queue.add(queue.peek().left);
}
if(queue.peek().right != null) {
queue.add(queue.peek().right);
}
//由于要倒着来,因此可以放到栈里面
stack.push(queue.peek());
queue.poll();
}
while(!stack.empty()) {
list1.add(stack.peek().val);//然后把栈里面的放到链表中
stack.pop();
}
list.add(list1);
flag = true;
}else {//如果是奇数层
list1 = new ArrayList<>();
for(int i = 0;i < qSize;i++) {
if(queue.peek().left != null) {
queue.add(queue.peek().left);
}
if(queue.peek().right != null) {
queue.add(queue.peek().right);
}
//直接就可以添加
list1.add(queue.poll().val);
}
list.add(list1);
flag = false;
}
}
return list;
}
}