Leetcode 429. N-ary Tree Level Order Traversal
题目链接: N-ary Tree Level Order Traversal
难度:Medium
题目大意:
N叉树的层级遍历。
思路:
思路1(DFS):
利用递归,先处理根节点,如何对子节点利用递归进行相同的操作,引入参数level来标记是第几层。
思路2(BFS):
利用迭代,每次把一层的节点全部出队,再把下一层的节点全部入队。和我之前一篇博客Leetcode 559. Maximum Depth of N-ary Tree中的思路2类似。
代码
思路1代码
/*
// 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;
}
dfs(root,res,0);
return res;
}
public void dfs(Node node,List<List<Integer>> res,int level){
if(res.size()==level){
List<Integer> list=new ArrayList<>();
res.add(list);
}
res.get(level).add(node.val);
for(Node child:node.children){
dfs(child,res,level+1);
}
}
}
思路2代码
/*
// 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;
}
Queue<Node> queue =new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()){
List<Integer> curLevel=new ArrayList<>();
int n=queue.size();//这一层的节点个数
for(int i=0;i<n;i++){//这一层的节点全部出队,下一层的节点全部入队
Node node=queue.poll();
curLevel.add(node.val);
for(Node child:node.children){
queue.offer(child);
}
}
res.add(curLevel);
}
return res;
}
}