MarcusV(南墙大佬的搬运工)

南墙大佬的CSDN博客地址

导航

Java实现 LeetCode 429 N叉树的层序遍历

429. N叉树的层序遍历

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

例如,给定一个 3叉树 :

在这里插入图片描述

返回其层序遍历:

[
     [1],
     [3,2,4],
     [5,6]
]
 

说明:

树的深度不会超过 1000。
树的节点总数不会超过 5000。

/*
// Definition for a Node.
class Node {
    public int val;
    public List<Node> children;

    public Node() {}

    public Node(int _val) {
        val = _val;
    }

    public Node(int _val, List<Node> _children) {
        val = _val;
        children = _children;
    }
};
*/
class Solution {
//递归大法

//      public List<List<Integer>> levelOrder(Node root) {
//     List<List<Integer>> res = new ArrayList<>();
//     if (root == null) return res;
//     helper(root, 0, res);
//     return res;
// }

// private void helper(Node root, int depth, List<List<Integer>> res) {
//     if (root == null) return;
//     //判断是否是新的一层
//     if (depth + 1 > res.size()) {
//         res.add(new ArrayList<>());
//     }
//     res.get(depth).add(root.val);

//     //处理子节点
//     for (Node node : root.children) {
//         if (node != null) {
//             helper(node, depth + 1, res);
//         }
//     }
// }


//队列迭代

public List<List<Integer>> levelOrder(Node root) {
    List<List<Integer>> res = new ArrayList<>();
    if (root == null) return res;
    Queue<Node> queue = new LinkedList<>();
    queue.add(root);
    while (!queue.isEmpty()) {
        int count = queue.size();
        //外层循环为一层
        List<Integer> list = new ArrayList<>();
        while (count-- > 0) {
            //将当前元素的非空子节点压入栈
            Node cur = queue.poll();
            list.add(cur.val);
            for (Node node : cur.children) {
                if (node != null) {
                    queue.add(node);
                }
            }
        }
        res.add(list);
    }
    return res;
}

 
}

posted on 2020-03-15 21:31  MarcusV  阅读(15)  评论(0编辑  收藏  举报