• 多节点树的层序遍历


    1、多节点数

    对于多节点树,顾名思义就是一个根节点下面有两个及两个以上的节点,对于多节点数的遍历,就无法使用二叉树的前中后序的遍历方式了。

    2、具体思路

     对于上面的一个多节点树,我们想要层序遍历它,预期结果为:

    第一层:1

    第二层:2 3 4 5

    第三层:6 7 8 9 10 11

    所以一起的结果为:1 2 3 4 5 6 7 8 9 10 11

    当然为了让显示的效果更加直观,我们可以随机将值打乱,这样可以更加直观的看到遍历的效果

    2.1、逐层遍历(第一层)

    直接遍历得到当前树的第一层的节点

    root.val

    2.2、逐层遍历(第二层......)

    遍历第二层的数的节点

    先得到当前节点的子节点

    ListNode[] nodes = root.getChildren();

    得到当前树的子节点的数组后,就可以对当前子节点数组进行遍历,然后递归去进行遍历当前子节点数组,直到叶子节点时结束

    3、具体代码实现

    1. package Leecode;
    2. import java.util.ArrayList;
    3. import java.util.List;
    4. /**
    5. * 全都给我写代码
    6. *
    7. * @author jiangminghui
    8. * @date 2022/11/11 21:57
    9. **/
    10. public class leetcode_429 {
    11. static List> list = new ArrayList<>();
    12. public static void main(String[] args) {
    13. // Node node1 = new Node();
    14. // node1.val = 1;
    15. // Node node2 = new Node();
    16. // node2.val = 2;
    17. // Node node3 = new Node();
    18. // node3.val = 3;
    19. // Node node4 = new Node();
    20. // node4.val = 4;
    21. // Node node5 = new Node();
    22. // node5.val = 5;
    23. // Node node6 = new Node();
    24. // node6.val = 6;
    25. // Node node7 = new Node();
    26. // node7.val = 7;
    27. // Node node8 = new Node();
    28. // node8.val = 8;
    29. // Node node9 = new Node();
    30. // node9.val = 9;
    31. // Node node10 = new Node();
    32. // node10.val = 10;
    33. // List children1 = new ArrayList<>();
    34. // children1.add(node2);
    35. // children1.add(node3);
    36. // children1.add(node4);
    37. // List children2 = new ArrayList<>();
    38. // children2.add(node5);
    39. // children2.add(node6);
    40. // children2.add(node7);
    41. // List children3 = new ArrayList<>();
    42. // children3.add(node8);
    43. // List children4 = new ArrayList<>();
    44. // children4.add(node9);
    45. // children4.add(node10);
    46. // node1.children = children1;
    47. // node3.children = children2;
    48. // node4.children = children3;
    49. // node8.children = children4;
    50. Node node1 = new Node();
    51. node1.val = 1;
    52. Node node2 = new Node();
    53. node2.val = 3;
    54. Node node3 = new Node();
    55. node3.val = 2;
    56. Node node4 = new Node();
    57. node4.val = 4;
    58. Node node5 = new Node();
    59. node5.val = 5;
    60. Node node6 = new Node();
    61. node6.val = 6;
    62. List children1 = new ArrayList<>();
    63. children1.add(node2);
    64. children1.add(node3);
    65. children1.add(node4);
    66. List children2 = new ArrayList<>();
    67. children2.add(node5);
    68. children2.add(node6);
    69. node1.children = children1;
    70. node2.children = children2;
    71. System.out.println(levelOrder(node1));
    72. }
    73. public static List> levelOrderNext(Node root) {
    74. if(root == null){
    75. return list;
    76. }
    77. List children = root.children;
    78. List innerList = new ArrayList<>();
    79. if(children!=null){
    80. for (int i = 0; i < children.size(); i++) {
    81. innerList.add(children.get(i).val);
    82. }
    83. list.add(innerList);
    84. for (int i = 0; i < children.size(); i++) {
    85. levelOrderNext(children.get(i));
    86. }
    87. }
    88. return list;
    89. }
    90. public static List> levelOrder(Node root){
    91. List arrayList = new ArrayList<>();
    92. arrayList.add(root.val);
    93. list.add(arrayList);
    94. List> listTemp = levelOrderNext(root);
    95. return listTemp;
    96. }
    97. }

  • 相关阅读:
    nodejs+vue+elementui寻医问药网站
    编译相关内容(自用)
    论文阅读——ELECTRA
    【动态规划刷题 10】最大子数组和 III && 环形子数组的最大和
    猿创征文| 怎么提高 Java 开发效率?使用 Idea 和它的插件
    Spring Cloud(八):Spring Cloud Alibaba Seata 2PC、AT、XA、TCC
    什么是人工智能,它是如何使用的?
    在Linux 下制作启动盘以及dd命令使用
    内存 管理
    机器学习——梯度下降算法
  • 原文地址:https://blog.csdn.net/weixin_45969711/article/details/127835923