N-ary tree pre/post/level order traversal
Preorder:
/*
// Definition for a Node.
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;
}
};
*/
class Solution {
public List<Integer> preorder(Node root) {
List<Integer> res = new ArrayList<>();
if (root == null) return res;
LinkedList<Node> stack = new LinkedList<>();
stack.push(root);
while (!stack.isEmpty()) {
Node cur = stack.pop();
res.add(cur.val);
int size = cur.children.size();
for (int i = size - 1; i >= 0; i--) {
if (cur.children.get(i) != null) stack.push(cur.children.get(i));
}
}
return res;
}
}
Post order:
class Solution {
public List<Integer> postorder(Node root) {
List<Integer> res = new ArrayList<>();
if (root == null) return res;
LinkedList<Node> stack = new LinkedList<>();
stack.push(root);
while (!stack.isEmpty()) {
Node cur = stack.pop();
res.add(0, cur.val);
int size = cur.children.size();
for (int i = 0; i < size; i++) {
if (cur.children.get(i) != null) stack.push(cur.children.get(i));
}
}
return res;
}
}
Recursion of recursion:
class Solution {
public List<Integer> postorder(Node root) {
List<Integer> res = new ArrayList<>();
if (root == null) return res;
helper(root, res);
return res;
}
private void helper(Node cur, List<Integer> res) {
if (cur == null) return;
int size = cur.children.size();
for (int i = 0; i < size; i++) {
helper(cur.children.get(i), res);
}
res.add(cur.val);
}
}
Level order:
iterate:
class Solution {
public List<List<Integer>> levelOrder(Node root) {
List<List<Integer>> res = new ArrayList<>();
if (root == null) return res;
Queue<Node> queue = new LinkedList<>();
Node cur = root;
queue.offer(cur);
while (!queue.isEmpty()) {
List<Integer> list = new ArrayList<>();
int size = queue.size();
for (int i = 0; i < size; i++) {
cur = queue.poll();
list.add(cur.val);
int sizeOfChildren = cur.children.size();
for (int j = 0; j < sizeOfChildren; j++) {
if (cur.children.get(j) != null) queue.offer(cur.children.get(j));
}
}
res.add(list);
}
return res;
}
}
recursive:
class Solution {
public List<List<Integer>> levelOrder(Node root) {
List<List<Integer>> res = new ArrayList<>();
if (root == null) return res;
helper(root, res, 0);
return res;
}
private void helper(Node cur, List<List<Integer>> res, int level) {
if (cur == null) return;
if (res.size() <= level) {
res.add(new ArrayList<>());
}
res.get(level).add(cur.val);
int size = cur.children.size();
for (int i = 0; i < size; i++) {
helper(cur.children.get(i), res, level + 1);
}
}
}

浙公网安备 33010602011771号