源码
用 栈 的特性(后进先出),来巧妙的控制遍历过程
注意LinkedList 是使用链表实现的栈,与数组实现的Stack 用法类似。
// 二叉树的层次遍历
public List<List<Integer>> levelOrder(TreeNode root) {
ArrayList<ArrayList<Integer>> ret = new ArrayList<ArrayList<Integer>>();
if(root == null) return ret;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.offer(root);
while(!queue.isEmpty()){
ArrayList<Integer> list = new ArrayList<Integer>();
int size = queue.size();
for(int i=0;i<size;i++){
TreeNode temp = queue.poll();
list.add(temp.val);
if(temp.left!=null)queue.offer(temp.left);
if(temp.right!=null)queue.offer(temp.right);
}
ret.add(list);
}
return ret;
}