一、思路
题目如下
由示例可知
N叉树和二叉树类似,不过其指针域是由链表构成,这也就是说不同的节点,指针域的节点数可能是不同的。
思路:类比二叉树的前序遍历,注意节点域的处理。
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;
}
};
二、代码
刚开始将branch声明为成员变量,实际上是错误的,成员变量是共享变量,进入递归函数则会出现灾难的后果,因为下层修改了branch的值,返回上层也会发生变化,因此branch应该声明为局部变量。
class Solution {
// private int branch = 0;//没有必要声明为成员变量,声明成成员变量还会出错,成员变量可以被多个递归函数共享,在递归中一层修改,上层下层1都会改变
private List<Integer> nodeList = new ArrayList<>();
public List<Integer> preorder(Node root) {
helper(root);
return nodeList;
}
public void helper(Node root){
if(root == null){
return ;
}
nodeList.add(root.val);
int branch = root.children.size();
for(int i = 0; i < branch; i++){
helper(root.children.get(i));
}
}
}