privatestaticfinal Split split = new Split("", Arrays.asList());
publicstaticvoidmain(String...args){ // 构建一棵多叉树 Node f = new Node("F", Arrays.asList()); Node e = new Node("E", Arrays.asList()); Node d = new Node("D", Arrays.asList()); Node b = new Node("B", Arrays.asList(f, e)); Node c = new Node("C", Arrays.asList(d)); Node h = new Node("H", Arrays.asList(d)); Node i = new Node("I", Arrays.asList()); Node a = new Node("A", Arrays.asList(b, c)); Node g = new Node("G", Arrays.asList(h, i)); Node s = new Node("S", Arrays.asList(a, g));
// 对树进行先序遍历 List<List<Node>> links = new ArrayList<>(); List<Node> link = new ArrayList<>(); List<Node> nodes = new ArrayList<>(); nodes.add(s); while (!nodes.isEmpty()) { Node node = nodes.remove(0); if (node == split) { // 将路径插入到最终结果集中 links.add(new ArrayList<>(link)); // 弹出根结点 link.remove(link.size()-1); continue; } link.add(node); // 先序遍历插头部,屏障插入到子结点的末尾 nodes.add(0, split); nodes.addAll(0, node.children); }
// 输出结果 output(links); }
/** 输出结果 */ privatestaticvoidoutput(List<List<Node>> links){ for (List<Node> link : links) { for (int i=0, len=link.size(); i<len; i++) { System.out.print(link.get(i)); if (i != len-1) { System.out.print("->"); } } System.out.println(); } }