递归
List<Integer> list = new ArrayList<Integer>();
// 创建list保存数据
public List<Integer> preorder(Node root) {//1ms
if(root == null) return list;
// 判断如果一开始的root为null就直接返回list
list.add(root.val);
// 递归之前先把当前数存入list
for(Node node:root.children){
// 循环遍历root下的子节点
preorder(node);
// 将子节点递归
}
return list;
}
迭代
在这里插入代码片
public List<Integer> preorder2(Node root) {//7ms
List<Integer> res = new ArrayList<>();
if (root == null) return res;
Stack<Node> stack = new Stack<>();
stack.push(root);
while (!stack.isEmpty()) {
Node cur = stack.pop();
//头结点加入结果集
res.add(cur.val);
//将该节点的子节点从右往左压入栈
List<Node> nodeList = cur.children;
for (int i = nodeList.size() - 1; i >= 0; i--) {
stack.push(nodeList.get(i));
}
}
return res;
}