二叉树的层序遍历
二叉树的先序遍历 | 二叉树的中序遍历 | 二叉树的后序遍历
基于队列(Queue)实现的自上而下、从左到右按层遍历二叉树
记录每一层节点的个数n,并出栈n次,这样就可以遍历完一层。
public ArrayList<Integer> levelTraversal(TreeNode root) {
if (root == null) {
return null;
}
// 使用双向链表(LinkedList)来表示队列(Queue)
Queue<TreeNode> queue = new LinkedList<TreeNode>();
ArrayList<Integer> ans = new ArrayList<Integer>(20);
TreeNode cur = root;
queue.offer(cur);
while(!queue.isEmpty()) {
// size 记录当前层的节点数,用于完整遍历当前层节点
for (int i = 0, size = queue.size(); i < size; i++){
cur = queue.poll();
ans.add(cur.val);
// 先入栈left,就是自上而下,从左到右遍历
// 先入栈right,就是从右到左遍历
if (cur.left != null) {
queue.offer(cur.left);
}
if (cur.right != null) {
queue.offer(cur.right);
}
}
}
return ans;
}