1. import java.util.*;
    2. /**
    3. * Created by Intellij IDEA.
    4. *
    5. * @author JonnyJiang
    6. * @date 2021/9/25
    7. */
    8. public class NSubTree {
    9. public Node root;
    10. public List<Integer> dfs(){
    11. return root.dfs(root);
    12. }
    13. public List<List<Integer>> bfs(){
    14. return root.bfs(root);
    15. }
    16. public static void main(String[] args) {
    17. NSubTree nSubTree = new NSubTree();
    18. Node root = new Node(1);
    19. Node sub1 = new Node(2);
    20. Node sub2 = new Node(3);
    21. Node sub3 = new Node(4);
    22. Node sub4 = new Node(5);
    23. Node sub5 = new Node(6);
    24. Node sub6 = new Node(7);
    25. Node sub7 = new Node(8);
    26. Node sub8 = new Node(9);
    27. List<Node> subs1 = new ArrayList<>();
    28. subs1.add(sub1);
    29. subs1.add(sub2);
    30. subs1.add(sub3);
    31. List<Node> subs2 = new ArrayList<>();
    32. subs2.add(sub4);
    33. subs2.add(sub5);
    34. sub1.sub = subs2;
    35. root.sub = subs1;
    36. nSubTree.root = root;
    37. System.out.println(nSubTree.bfs());
    38. }
    39. }
    40. class Node{
    41. public int val;
    42. public List<Node> sub;
    43. public Node(int val){
    44. this.val = val;
    45. sub = null;
    46. }
    47. public List<Integer> dfs(Node root) {
    48. List<Integer> ret = new ArrayList<>();
    49. if(root == null){
    50. return ret;
    51. }
    52. if(root.sub == null){
    53. ret.add(root.val);
    54. return ret;
    55. }
    56. Stack<Node> stack = new Stack<>();
    57. stack.push(root);
    58. Node tmp;
    59. while(!stack.isEmpty()){
    60. tmp = stack.pop();
    61. ret.add(tmp.val);
    62. if(tmp.sub != null){
    63. Collections.reverse(tmp.sub);
    64. for(Node n:tmp.sub){
    65. stack.push(n);
    66. }
    67. }
    68. }
    69. return ret;
    70. }
    71. public List<List<Integer>> bfs(Node root) {
    72. List<List<Integer>> ret = new ArrayList<>();
    73. if(root == null){
    74. return ret;
    75. }
    76. if(root.sub == null){
    77. List<Integer> e = new ArrayList<>();
    78. e.add(root.val);
    79. ret.add(e);
    80. return ret;
    81. }
    82. Queue<Node> queue = new LinkedList<>();
    83. Queue<Node> queue2 = new LinkedList<>();
    84. queue.offer(root);
    85. Node tmp;
    86. List<Integer> list = new ArrayList<>();
    87. ret.add(list);
    88. while(!queue.isEmpty()){
    89. tmp = queue.poll();
    90. list.add(tmp.val);
    91. if(tmp.sub != null){
    92. for(Node n:tmp.sub){
    93. queue2.offer(n);
    94. }
    95. }
    96. if(queue.isEmpty() && !queue2.isEmpty()){
    97. list = new ArrayList<>();
    98. ret.add(list);
    99. Queue<Node> t = queue2;
    100. queue2 = queue;
    101. queue = t;
    102. }
    103. }
    104. return ret;
    105. }
    106. }