LeetCode 二叉树的层序遍历/N 叉树的层序遍历

517 阅读1分钟

这是我参与更文挑战的第 21 天,活动详情查看: 更文挑战

二叉树的层序遍历(102)

题目描述

给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。

进阶

递归法很简单,你可以使用迭代法完成此题吗?

示例 1:

二叉树:[3,9,20,null,null,15,7],
    3
   / \
  9  20
    /  \
   15   7

返回其层序遍历结果:

[
  [3],
  [9,20],
  [15,7]
]

思路分析

二叉树的层序遍历,也是很重要的一个知识点,除了前序、中序,后序(递归和迭代的写法都要掌握),我们还需要掌握层序遍历,通过一个队列,每次先记录下队列的大小,然后遍历这些次数。这样每次while循环时,我们遍历的都是一层的所有节点的个数,然后依次把这个节点的所有子节点都加进来。

代码展示

解法一:时间复杂度是O(n){O(n)},空间复杂度是O(n){O(n)}

    public List<Integer> preorder(Node root) {
        List<Integer> res = new ArrayList<>();
        preorderInternal(root,res);
        return res;
    }

    private void preorderInternal(Node root,List<Integer> res){
        if(root == null){
            return;
        }
        res.add(root.val);
        for(int i = 0;i < root.children.size();++i){
            preorderInternal(root.children.get(i),res);
        }
    }

N叉树的层序遍历(429)

题目描述

给定一个 N 叉树,返回其节点值的 后序遍历 。

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]]

提示

  • 树的高度不会超过 1000
  • 树的节点总数在 [0, 10^4] 之间

思路分析

N 叉树的层序遍历,我们也可以使用类似二叉树的层序遍历来进行遍历,通过一个队列,每次先记录下队列的大小,然后遍历这些次数。这样每次while循环时,我们遍历的都是一层的所有节点的个数,然后依次把这个节点的所有子节点都加进来。

我们也可以使用addAll方法一次把所有的子节点全部加进来。

代码展示

解法一:时间复杂度是O(n){O(n)},空间复杂度是O(n){O(n)}

public List<List<Integer>> levelOrder(Node root) {
        List<List<Integer>> result = new ArrayList<>();
        if(root == null){
            return result;
        }
        Queue<Node> queue = new LinkedList<>();
        queue.add(root);
        while(!queue.isEmpty()){
            int size = queue.size();
            List<Integer> innerList = new ArrayList<>();
            for(int i = 0;i < size;i++){
                Node node = queue.poll();
                innerList.add(node.val);
                queue.addAll(node.children);
            }
            result.add(innerList);
    
        }
        return result;
    }

总结

二叉树/N叉树的层序遍历,总体来说思路是比较相近的,都是利用队列每次遍历一层的数量,然后把该层节点的所有子节点一次加入队列中,知道直到结束。

二叉树/N叉树的前序、中序(N叉树没有)、后续遍历我们都要牢牢掌握,同时我们也应该掌握层序遍历,这些基础的知识一定要牢牢的掌握。