leetcode - 102. 二叉树的层序遍历

373 阅读1分钟

给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 示例: 二叉树:[3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回其层次遍历结果:

[
  [3],
  [9,20],
  [15,7]
]
  • Queue:
    • offer 新元素进队列
    • peek 取队列队首元素
    • poll 队首元素出队列

使用队列来进行二叉树的层级遍历:

public List<List<Integer>> levelOrder(TreeNode root) {
    List<List<Integer>> result = new ArrayList<>();
    Queue<TreeNode> queue = new LinkedList<>();
    // 初始化:第一层
    queue.offer(root);
    // 边界条件:当队列不为空
    while(!queue.isEmpty()) {
        // 当前层级
        int size = queue.size();
        // 用来保存当前层即的数据
        List<Integer> level = new ArrayList<>();
        for(int i = 0; i < size ; ++i) {
            // 去除队列顶部的值
            TreeNode cur = queue.peek();
            // 出队列
            queue.poll();
            if(cur == null) {
               continue;
            }
            level.add(cur.val);
            // 将当前节点的左右子节点加入队列
            queue.offer(cur.left);
            queue.offer(cur.right);
        }
        if(!level.isEmpty()) {
            result.add(level);
        }
    }
    return result;
}