倒序 正序
import java.util.*; /* 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();//用于返回最后的结果 if(pRoot == null) return res;//如果根节点为空就返回结果 Deque<TreeNode> que = new LinkedList<TreeNode>();//用于存储每一层的节点 que.offer(pRoot); int layer =0; while(!que.isEmpty()){ ArrayList<Integer> temp = new ArrayList<>(); int len = que.size(); for(int i=0;i<len;i++){ TreeNode node = que.poll(); if(layer%2==0){ temp.add(node.val); }else{ temp.add(0,node.val); } if(node.left!=null) que.offer(node.left); if(node.right!=null) que.offer(node.right); } layer++; res.add(temp); } return res; } }
1、add()和offer()区别:
add()和offer()都是向队列中添加一个元素。一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,调用 add() 方法就会抛出一个 unchecked 异常,而调用 offer() 方***返回 false。因此就可以在程序中进行有效的判断!
2.
public class Solution { public ArrayList<ArrayList<Integer> > Print(TreeNode root) { ArrayList<ArrayList<Integer>> res = new ArrayList();//用于返回最后的结果 if(root == null) return res;//如果根节点为空就返回结果 LinkedList<TreeNode> q = new LinkedList<TreeNode>();//用于存储每一层的节点 q.add(root); int count = 0; while(!q.isEmpty()){ ArrayList<Integer> temp = new ArrayList(); for(int i=q.size(); i>0; i--){ TreeNode node = q.poll(); if(count%2== 0){ temp.add(node.val); } else{ temp.add(0,node.val); } if(node.left!=null) q.offer(node.left); if(node.right!=null) q.offer(node.right); } count++; res.add(temp); } return res; } }