1、题目描述
2、题目解答分析
题目前提(N叉树结构体)
class Node {
public int val;
public List<Node> children;
Node(int val){
this.val = val;
}
Node(int val, List<Node> children){
this.val = val;
this.children = children;
}
}
可参考二叉树的前序遍历逻辑:
class Solution {
List<Integer> list = new ArrayList<Integer>();
public List<Integer> preorder(Node root) {
dfs(root);
return list;
}
private void dfs(Node root){
if(root == null) return;
list.add(root.val);
for( Node node : root.children ){
dfs(node);
}
}
}
复杂度分析
时间复杂度:O(m),其中 m 为 N 叉树的节点。每个节点恰好被遍历一次。
空间复杂度:O(m),递归过程中需要调用栈的开销,平均情况下为 O(logm),最坏情况下树的深度为 m-1,此时需要的空间复杂度为 O(m)。
备注:一般此类遍历,不是递归,就是迭代(使用队列容器)完成,此题用容器法较复杂,但是在层序遍历时,请尽量两种方法都写出。