二叉树层序遍历LeetCode102

85 阅读1分钟

1.题目

leetcode.cn/problems/bi…

2.答案

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> res = new LinkedList<>();
        if (root == null) {
            return res;
        }

        Queue<TreeNode> q = new LinkedList<>();
        q.offer(root);
        // while 循环控制从上向下一层层遍历
        while (!q.isEmpty()) {
            int sz = q.size();
            // 记录这一层的节点值
            List<Integer> level = new LinkedList<>();
            // for 循环控制每一层从左向右遍历
            for (int i = 0; i < sz; i++) {
                TreeNode cur = q.poll();
                level.add(cur.val);
                if (cur.left != null)
                    q.offer(cur.left);
                if (cur.right != null)
                    q.offer(cur.right);
            }
            res.add(level);
        }
        return res;
    }
} 
  1. public List<List<Integer>> levelOrder(TreeNode root) {:这是一个名为levelOrder的公共方法,接受一个名为root的二叉树节点作为输入参数,返回一个包含每一层节点值的二维整数列表。

  2. List<List<Integer>> res = new LinkedList<>();:创建一个名为res的空列表,用于存储最终的结果,这是一个二维整数列表。

  3. if (root == null) { return res; }:如果输入的根节点root为空(表示二叉树为空),则直接返回空的结果列表res

  4. Queue<TreeNode> q = new LinkedList<>();:创建一个队列q,用于辅助层次遍历二叉树。这个队列的元素类型是TreeNode,表示二叉树节点。

  5. q.offer(root);:将根节点root添加到队列q中,作为起始节点进行遍历。

  6. while (!q.isEmpty()) {:进入一个循环,只要队列q不为空,就继续遍历二叉树的每一层。

  7. int sz = q.size();:获取当前队列q的大小,即当前层的节点个数。

  8. List<Integer> level = new LinkedList<>();:创建一个空列表level,用于存储当前层的节点值。

  9. for (int i = 0; i < sz; i++) {:进入一个循环,遍历当前层的所有节点。

  10. TreeNode cur = q.poll();:从队列q中弹出一个节点,并将其赋给cur,表示当前处理的节点。

  11. level.add(cur.val);:将当前节点的值cur.val添加到当前层的列表level中,记录当前层的节点值。

  12. if (cur.left != null) q.offer(cur.left);:如果当前节点cur的左子节点不为空,则将左子节点添加到队列q中,以便后续遍历。

  13. if (cur.right != null) q.offer(cur.right);:如果当前节点cur的右子节点不为空,则将右子节点添加到队列q中,以便后续遍历。

  14. res.add(level);:将存储当前层节点值的列表level添加到结果列表res中,表示完成了对当前层的遍历。

  15. 循环回到步骤 7,继续处理下一层的节点,直到队列q为空,即完成了整个二叉树的层次遍历。

  16. 最后,返回存储了每一层节点值的结果列表res,即完成了层次遍历并整理好的结果