N叉树的层序遍历
https://leetcode-cn.com/problems/n-ary-tree-level-order-traversal/
bfs
/*
// 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>> lists = new ArrayList<>();
if(root==null){
return lists;
}
Queue<Node> q = new LinkedList<>();
if (root == null) return null;
q.offer(root);
while (!q.isEmpty()) {
int size = q.size();
List list = new ArrayList();
Node node = null;
for (int i = 0; i < size; i++) {
node = q.poll();
list.add(node.val);
List<Node> nodes = node.children;
if (nodes == null) continue;
for (Node n : nodes) {
q.offer(n);
}
}
lists.add(list);
}
return lists;
}
}
递归
public class Solution {
List<List<Integer>> lists = new ArrayList<>();
public List<List<Integer>> levelOrder(Node root) {
List<List<Integer>> res = new ArrayList<>();
if (root == null) return res;
getOrder(root, 0, res);
return res;
}
private void getOrder(Node root, int level,List<List<Integer>> res) {
if (root == null) return;
if(res.size()<level+1){
res.add(new ArrayList<Integer>());
}
res.get(level).add(root.val);
for(Node node:root.children){
if(node!=null){
getOrder(node,level+1,res);
}
}
}
}