二叉树的层序遍历 力扣102

打印 上一主题 下一主题

主题 998|帖子 998|积分 2994

一、标题


二、思路

  层序遍历是一种经典的二叉树遍历方法,通常利用队列来实现。详细步骤如下:
        将根节点参加队列。
        开始循环处理:
                从队列中取出一个节点举行访问。
                假如该节点有左子节点,则将左子节点入队。
                假如该节点有右子节点,则将右子节点入队。
        重复上述过程直到队列为空。
这样可以确保每一层的节点按序次被访问,并且其子节点依次参加队列等候后续处理。
三、代码

  1. class Solution {
  2.     public List<List<Integer>> levelOrder(TreeNode root) {
  3.      //1.定义集合存放层序遍历的结果
  4.         List<List<Integer>> resList = new ArrayList<List<Integer>>();
  5.         if (root == null){
  6.             return resList;
  7.         }
  8.         //2.创建队列
  9.         Queue<TreeNode> que = new LinkedList<TreeNode>();
  10.         que.offer(root);
  11.         while (!que.isEmpty()) {
  12.             List<Integer> itemList = new ArrayList<Integer>();
  13.             int len = que.size();
  14.             //这里是核心逻辑,这里的len其实是每一层的节点个数,一开始只有一个节点。
  15.             //第一次循环只执行一次,将根节点的左右孩子加入到队列中时,此时len就会更新成孩子个数
  16.             //所以,当len为0时,说明当前层遍历完了,此时再执行一次循环,就会遍历下一层的节点
  17.             while (len > 0) {
  18.                 TreeNode tmpNode = que.poll();
  19.                 itemList.add(tmpNode.val);
  20.                 if (tmpNode.left != null) que.offer(tmpNode.left); //左孩子入队
  21.                 if (tmpNode.right != null) que.offer(tmpNode.right); //右孩子入队
  22.                 len--;
  23.             }
  24.             resList.add(itemList); //处理完一层,将这一层的结果加入到resList中
  25.         }
  26.         return resList;
  27.     }
  28. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用户云卷云舒

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表