dengxinyi 5 년 전
부모
커밋
777475bb1b
1개의 변경된 파일115개의 추가작업 그리고 0개의 파일을 삭제
  1. 115 0
      written-exam/freewheel-onsite-2019/no1/Main.java

+ 115 - 0
written-exam/freewheel-onsite-2019/no1/Main.java

@@ -0,0 +1,115 @@
+import java.util.*;
+
+public class Main {
+    public static void main(String[] args) {
+        //         1
+        //      2     3
+        //    4   5     6
+        Node root = new Node(1);
+        Node n11 = new Node(2);
+        Node n12 = new Node(3);
+        Node n21 = new Node(4);
+        Node n22 = new Node(5);
+        Node n23 = new Node(6);
+        root.left = n11;
+        root.right = n12;
+        n11.left = n21;
+        n11.right = n22;
+        n12.right = n23;
+        inOrder(root);
+        preOrder(root);
+        postOrder(root);
+        postOrderAlter(root);
+    }
+
+    public static void inOrder(Node root) {
+        Stack<Node> stack = new Stack<>();
+        Node curr = root;
+        while (curr != null || !stack.isEmpty()) {
+            while (curr != null) {
+                stack.push(curr);
+                curr = curr.left; // Traversal left
+            }
+            curr = stack.pop(); // Do sth on root
+            System.out.printf("%d\t", curr.val);
+            if (curr != null) {
+                curr = curr.right; // Traversal right
+            }
+        }
+        System.out.println();
+    }
+
+    public static void preOrder(Node root) {
+        Stack<Node> stack = new Stack<>();
+        Node curr = root;
+        while (curr != null || !stack.isEmpty()) {
+            while (curr != null) {
+                System.out.printf("%d\t", curr.val);
+                stack.push(curr);
+                curr = curr.left;
+            }
+            if (!stack.isEmpty()) {
+                curr = stack.pop();
+                curr = curr.right;
+            }
+        }
+        System.out.println();
+    }
+
+    public static void postOrder(Node root) {
+        Stack<Node> stack = new Stack<>();
+        Stack<Node> reverse = new Stack<>();
+        Node curr = root;
+        while (curr != null || !stack.isEmpty()) {
+            while (curr != null) {
+                stack.push(curr);
+                reverse.push(curr);
+                curr = curr.right;
+            }
+            if (!stack.isEmpty()) {
+                curr = stack.pop();
+                curr = curr.left;
+            }
+        }
+        while (!reverse.isEmpty()) {
+            System.out.printf("%d\t", reverse.pop().val);
+        }
+        System.out.println();
+    }
+
+    public static void postOrderAlter(Node root) {
+        Stack<Node> stack = new Stack<>();
+        if (root != null) stack.push(root);
+        Node curr = null;
+        Node prev = null;
+        while (!stack.isEmpty()) {
+            curr = stack.peek();
+            if (prev == null || prev.left == curr || prev.right == curr) {
+                if (curr.left != null) {
+                    stack.push(curr.left);
+                } else if (curr.right != null) {
+                    stack.push(curr.right);
+                }
+            } else if (curr.left == prev) {
+                if (curr.right != null) {
+                    stack.push(curr.right);
+                }
+            } else {
+                System.out.printf("%d\t", curr.val);
+                stack.pop();
+            }
+            prev = curr;
+        }
+        System.out.println();
+    }
+}
+
+class Node {
+    int val;
+    Node left;
+    Node right;
+
+    public Node(int val) {
+        this.val = val;
+    }
+}