Leetcode589.N叉树的前序遍历 N-ary Tree Preorder Traversal(Java)
##Tree##
与二叉树的前序遍历类似,可以采用深度优先遍历或迭代法完成
采用迭代法时,要借助栈,且注意入栈顺序和出栈遍历顺序相反,因此当前遍历结点curr
的儿子结点入栈时需要对儿子结点的集合进行翻转Collections.reverse(curr)
,才能保证出栈遍历时的顺序为前序遍历
**时间复杂度:**O(n)
DFS
class Solution {
ArrayList<Integer> ans = new ArrayList<>();
public List<Integer> preorder(Node root) {
dfs(root);
return ans;
}
private void dfs(Node root) {
if (root == null) return;
ans.add(root.val);
for (Node n : root.children) {
dfs (n);
}
}
}
迭代法
class Solution {
public List<Integer> preorder(Node root) {
ArrayList<Integer> ans = new ArrayList<>();
Stack<Node> sta = new Stack<>();
if (root == null) return ans;
sta.add(root);
while (!sta.isEmpty()) {
Node curr = sta.pop();
ans.add(curr.val);
Collections.reverse(curr.children);
for (Node n : curr.children) {
sta.push(n);
}
}
return ans;
}
}