Main.java 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import java.util.*;
  2. public class Main {
  3. public static void main(String[] args) {
  4. // 1
  5. // 2 3
  6. // 4 5 6
  7. Node root = new Node(1);
  8. Node n11 = new Node(2);
  9. Node n12 = new Node(3);
  10. Node n21 = new Node(4);
  11. Node n22 = new Node(5);
  12. Node n23 = new Node(6);
  13. root.left = n11;
  14. root.right = n12;
  15. n11.left = n21;
  16. n11.right = n22;
  17. n12.right = n23;
  18. inOrder(root);
  19. preOrder(root);
  20. postOrder(root);
  21. postOrderAlter(root);
  22. }
  23. public static void inOrder(Node root) {
  24. Stack<Node> stack = new Stack<>();
  25. Node curr = root;
  26. while (curr != null || !stack.isEmpty()) {
  27. while (curr != null) {
  28. stack.push(curr);
  29. curr = curr.left; // Traversal left
  30. }
  31. curr = stack.pop(); // Do sth on root
  32. System.out.printf("%d\t", curr.val);
  33. if (curr != null) {
  34. curr = curr.right; // Traversal right
  35. }
  36. }
  37. System.out.println();
  38. }
  39. public static void preOrder(Node root) {
  40. Stack<Node> stack = new Stack<>();
  41. Node curr = root;
  42. while (curr != null || !stack.isEmpty()) {
  43. while (curr != null) {
  44. System.out.printf("%d\t", curr.val);
  45. stack.push(curr);
  46. curr = curr.left;
  47. }
  48. if (!stack.isEmpty()) {
  49. curr = stack.pop();
  50. curr = curr.right;
  51. }
  52. }
  53. System.out.println();
  54. }
  55. public static void postOrder(Node root) {
  56. Stack<Node> stack = new Stack<>();
  57. Stack<Node> reverse = new Stack<>();
  58. Node curr = root;
  59. while (curr != null || !stack.isEmpty()) {
  60. while (curr != null) {
  61. stack.push(curr);
  62. reverse.push(curr);
  63. curr = curr.right;
  64. }
  65. if (!stack.isEmpty()) {
  66. curr = stack.pop();
  67. curr = curr.left;
  68. }
  69. }
  70. while (!reverse.isEmpty()) {
  71. System.out.printf("%d\t", reverse.pop().val);
  72. }
  73. System.out.println();
  74. }
  75. public static void postOrderAlter(Node root) {
  76. Stack<Node> stack = new Stack<>();
  77. if (root != null) stack.push(root);
  78. Node curr = null;
  79. Node prev = null;
  80. while (!stack.isEmpty()) {
  81. curr = stack.peek();
  82. if (prev == null || prev.left == curr || prev.right == curr) {
  83. if (curr.left != null) {
  84. stack.push(curr.left);
  85. } else if (curr.right != null) {
  86. stack.push(curr.right);
  87. }
  88. } else if (curr.left == prev) {
  89. if (curr.right != null) {
  90. stack.push(curr.right);
  91. }
  92. } else {
  93. System.out.printf("%d\t", curr.val);
  94. stack.pop();
  95. }
  96. prev = curr;
  97. }
  98. System.out.println();
  99. }
  100. }
  101. class Node {
  102. int val;
  103. Node left;
  104. Node right;
  105. public Node(int val) {
  106. this.val = val;
  107. }
  108. }