import java.util.*;
/**
* Created by Intellij IDEA.
*
* @author JonnyJiang
* @date 2021/9/25
*/
public class NSubTree {
public Node root;
public List<Integer> dfs(){
return root.dfs(root);
}
public List<List<Integer>> bfs(){
return root.bfs(root);
}
public static void main(String[] args) {
NSubTree nSubTree = new NSubTree();
Node root = new Node(1);
Node sub1 = new Node(2);
Node sub2 = new Node(3);
Node sub3 = new Node(4);
Node sub4 = new Node(5);
Node sub5 = new Node(6);
Node sub6 = new Node(7);
Node sub7 = new Node(8);
Node sub8 = new Node(9);
List<Node> subs1 = new ArrayList<>();
subs1.add(sub1);
subs1.add(sub2);
subs1.add(sub3);
List<Node> subs2 = new ArrayList<>();
subs2.add(sub4);
subs2.add(sub5);
sub1.sub = subs2;
root.sub = subs1;
nSubTree.root = root;
System.out.println(nSubTree.bfs());
}
}
class Node{
public int val;
public List<Node> sub;
public Node(int val){
this.val = val;
sub = null;
}
public List<Integer> dfs(Node root) {
List<Integer> ret = new ArrayList<>();
if(root == null){
return ret;
}
if(root.sub == null){
ret.add(root.val);
return ret;
}
Stack<Node> stack = new Stack<>();
stack.push(root);
Node tmp;
while(!stack.isEmpty()){
tmp = stack.pop();
ret.add(tmp.val);
if(tmp.sub != null){
Collections.reverse(tmp.sub);
for(Node n:tmp.sub){
stack.push(n);
}
}
}
return ret;
}
public List<List<Integer>> bfs(Node root) {
List<List<Integer>> ret = new ArrayList<>();
if(root == null){
return ret;
}
if(root.sub == null){
List<Integer> e = new ArrayList<>();
e.add(root.val);
ret.add(e);
return ret;
}
Queue<Node> queue = new LinkedList<>();
Queue<Node> queue2 = new LinkedList<>();
queue.offer(root);
Node tmp;
List<Integer> list = new ArrayList<>();
ret.add(list);
while(!queue.isEmpty()){
tmp = queue.poll();
list.add(tmp.val);
if(tmp.sub != null){
for(Node n:tmp.sub){
queue2.offer(n);
}
}
if(queue.isEmpty() && !queue2.isEmpty()){
list = new ArrayList<>();
ret.add(list);
Queue<Node> t = queue2;
queue2 = queue;
queue = t;
}
}
return ret;
}
}