《LeetCode刷题》429. N 叉树的层序遍历(java篇)

题目描述:

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

树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。

示例 1:

《LeetCode刷题》429. N 叉树的层序遍历(java篇)_第1张图片

输入:root = [1,null,3,2,4,null,5,6]
输出:[[1],[3,2,4],[5,6]]
示例 2:

《LeetCode刷题》429. N 叉树的层序遍历(java篇)_第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)
链接:https://leetcode-cn.com/problems/n-ary-tree-level-order-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

---------------------------------------------------------------------------------------------------------------------------------

day19:

今天是一道中等题,涉及到树的知识会比较难写一点,开始一直想通过递归来写,最后发现有点不理想,就换了个思路通过队列来做,看看代码:

《LeetCode刷题》429. N 叉树的层序遍历(java篇)_第3张图片

public List> levelOrder(Node root) {
        if (root == null) {
            return new ArrayList>();
        }

        List> ans = new ArrayList>();
        Queue queue = new ArrayDeque();
        queue.offer(root);

        while (!queue.isEmpty()) {
            int cnt = queue.size();
            List level = new ArrayList();
            for (int i = 0; i < cnt; ++i) {
                Node cur = queue.poll();
                level.add(cur.val);
                for (Node child : cur.children) {
                    queue.offer(child);
                }
            }
            ans.add(level);
        }

        return ans;
    }

 思路解析:

如果root都为空,直接返回空链表,创建一个ans来返回值,创建一个Node队列来存储值,先把root存放入队列(用offer防止异常),每次循环通过cnt来存队列的值,当队列空了时退出,因为ans是list嵌套list,所以创建一个临时列表level,来存储每一层的值,通过cnt循环每层的个数,把当前层的val存入level中,然后把children存入队列中(把下一层存入到队列中),遍历完后就得到ans结果了

你可能感兴趣的:(java,leetcode,算法,leetcode,java,程序人生)