二叉树的层序遍历
一个简单的二叉树示例:
3
/ \
9 20
/ \
15 7
输出的结果应该是:
[
[3],
[9,20],
[15,7]
]
思路分析:
从根节点开始遍历,利用队列进行缓存。
1、先将根节点入队,然后出队后将其左右孩子节点,依次加入队列,第一层遍历结束;
2、然后再将第二层的左右节点出队,每出一个节点,就将其孩子节点入队缓存,第二层遍历结束
3、最后将第三层的节点依次出队,并保持其孩子节点,但其并不存在孩子节点,就会使队列里没有元素,从遍历结束。
代码如下:
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> levelOrder = new LinkedList<>();
if (root == null){
return levelOrder;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()) {
int size = queue.size();
List<Integer> level = new LinkedList<>();
for (int i = 0; i < size; i++) {
TreeNode node = queue.poll();
level.add(node.val);
if (node.left != null){
queue.add(node.left);
}
if (node.right != null){
queue.add(node.right);
}
}
levelOrder.add(level);
}
return levelOrder;
}