题目
给定一个 N 叉树,返回其节点值的前序遍历。
例如,给定一个 3叉树 :
返回其前序遍历: [1,3,5,6,2,4]。
分析
与二叉搜索树的遍历一致,有两种方法
代码
第一种:使用迭代方法
/**
* 非递归遍历,速度比较慢
*
* @param root
* @return
*/
public List<Integer> preorder(Node root) {
List<Integer> list = new ArrayList<>();
if (root == null) {
return list;
}
Stack<Node> stack = new Stack<>();
stack.push(root);
while (!stack.isEmpty()) {
Node cur = stack.pop();
list.add(cur.val);
List<Node> childrens = cur.children;
for (int i = childrens.size() - 1; i >= 0; i--) {
Node children = childrens.get(i);
stack.push(children);
}
}
return list;
}
第二种方法:使用递归
/**
* 递归方式,速度更快
*
* @param root
* @return
*/
public List<Integer> preorder2(Node root) {
List<Integer> list = new ArrayList<>();
preorder(root, list);
return list;
}
private void preorder(Node node, List<Integer> list) {
if (node == null) {
return;
}
list.add(node.val);
List<Node> childrens = node.children;
for (int i = 0; i < childrens.size(); i++) {
preorder(childrens.get(i), list);
}
}