fork download
  1. import java.util.*;
  2.  
  3. public class Main {
  4. static class Node {
  5. Node left;
  6. Node right;
  7. int data;
  8. Node(int data) {
  9. this.data = data;
  10. }
  11. }
  12.  
  13. static Node buildTree(int[] vals) {
  14. if (vals.length == 0 || vals[0] == -1) return null;
  15. Node root = new Node(vals[0]);
  16. Queue<Node> q = new LinkedList<>();
  17. q.offer(root);
  18. int i = 1;
  19. while (!q.isEmpty() && i < vals.length) {
  20. Node curr = q.poll();
  21. if (i < vals.length && vals[i] != -1) {
  22. curr.left = new Node(vals[i]);
  23. q.offer(curr.left);
  24. }
  25. i++;
  26. if (i < vals.length && vals[i] != -1) {
  27. curr.right = new Node(vals[i]);
  28. q.offer(curr.right);
  29. }
  30. i++;
  31. }
  32. return root;
  33. }
  34.  
  35. static List<Integer> res = new ArrayList<>();
  36.  
  37. static void seq(Node root) {
  38. if (root == null) return;
  39. seq(root.left);
  40. res.add(root.data);
  41. seq(root.right);
  42. }
  43.  
  44. public static void main(String[] args) {
  45. Scanner sc = new Scanner(System.in);
  46. int n = sc.nextInt();
  47. int[] vals = new int[n];
  48. for (int i = 0; i < n; i++) {
  49. vals[i] = sc.nextInt();
  50. }
  51.  
  52. Node root = buildTree(vals);
  53. seq(root);
  54.  
  55. StringBuilder sb = new StringBuilder();
  56. for (int i = 0; i < res.size(); i++) {
  57. sb.append(res.get(i));
  58. if (i != res.size() - 1) sb.append(" ");
  59. }
  60. System.out.println(sb.toString());
  61. }
  62. }
Success #stdin #stdout 0.14s 50412KB
stdin
7
1 2 3 4 5 -1 -1
stdout
4 2 5 1 3