LeetCode429. N 叉树的层序遍历

1 题目描述

给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。

树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。
示例 1:
在这里插入图片描述
输入:root = [1,null,3,2,4,null,5,6]
输出:[[1],[3,2,4],[5,6]]

示例 2:
在这里插入图片描述

输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
输出:[[1],[2,3,4,5],[6,7,8,9,10],[11,12,13],[14]]

来源:力扣(LeetCode)
链接:429. N 叉树的层序遍历

2 算法设计

本题实际上和二叉树的层次遍历是一样的,唯一的不同就是再遍历N叉树时,父节点的孩子节点可能有多个,需要遍历孩子节点数组。这里还是采用广度遍历优先的迭代算法来实现,从根节点开始,不断向下进行迭代遍历每一层的节点元素,然后用一个队列来存储遍历到的节点,最后将节点的元素值存进结果的list数组即可。

3 代码实现

class Solution {
     public List<List<Integer>> levelOrder(Node root) {
      return levelSearch(root);
    }

   public List<List<Integer>> levelSearch(Node root){
   	//最后要返回的结果数组
       List<List<Integer>> resList = new ArrayList<>();
       if (root == null) return new ArrayList<>();
       Queue<Node> queue = new LinkedList<>();
       queue.offer(root);
       //对树的每一层进行迭代遍历
       while (!queue.isEmpty()){
           ArrayList<Integer> tmpList = new ArrayList<>();
           int len = queue.size();
           while (len > 0){
               Node tmpNode = queue.poll();
               tmpList.add(tmpNode.val);
               //如果当前节点有孩子节点,遍历到队列中
               if (tmpNode.children != null){
                   for (Node node:tmpNode.children){
                       queue.offer(node);
                   }
               }
               len--;
           }
           resList.add(tmpList);
       }
       return resList;
   }
    
}

4 运行结果

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值