/** * 1497. 树的遍历 * https://www.acwing.com/problem/content/1499/ * * @author yangxiaozhuo * @date 2023/02/20 */ publicclassMain { publicstaticvoidmain(String[] args)throws IOException { BufferedReaderin=newBufferedReader(newInputStreamReader(System.in)); intn= Integer.parseInt(in.readLine()); int[] follow = newint[n]; int[] middle = newint[n]; String[] s = in.readLine().split(" "); for (inti=0; i < follow.length; i++) { follow[i] = Integer.parseInt(s[i]); } s = in.readLine().split(" "); for (inti=0; i < middle.length; i++) { middle[i] = Integer.parseInt(s[i]); } int[] res = newint[n]; intindex=0; Noderoot= fun(middle, 0, middle.length - 1, follow, 0, follow.length - 1); ArrayDeque<Node> nodes = newArrayDeque<>(); nodes.add(root); while (index < n) { intsize= nodes.size(); for (inti=0; i < size; i++) { Nodenode= nodes.removeFirst(); res[index++] = node.val; if (node.left != null) { nodes.addLast(node.left); } if (node.right != null) { nodes.addLast(node.right); } } } StringBuildersber=newStringBuilder(); for (int num : res) { sber.append(num); sber.append(" "); } System.out.println(sber.toString()); }
privatestatic Node fun(int[] middle, int a, int b, int[] follow, int x, int y) { if (x > y) { returnnull; } Nodenode=newNode(follow[y]); for (inti= a; i <= b; i++) { if (middle[i] == follow[y]) { // node.left = fun(middle, a, i - 1, follow, x, x + i - a - 1); node.right = fun(middle, i + 1, b, follow, y - b + i, y - 1); } } return node; }
publicstaticvoiddfs(ArrayList<Integer> list, int[] vis, int m, int at) { if (list.size() == m) { StringBuffersb=newStringBuffer(); for (inti=0; i < list.size(); i++) { sb.append(list.get(i)); sb.append(" ");
} sb.deleteCharAt(sb.length() - 1); System.out.println(sb.toString()); return; } for (inti= at + 1; i < vis.length; i++) { if (vis[i] == 0) { vis[i] = 1; list.add(i); dfs(list, vis, m, i); vis[i] = 0; list.remove(list.size() - 1); } } } }