diff --git a/src/Traversal.java b/src/Traversal.java index 8da0f79..efc46bf 100644 --- a/src/Traversal.java +++ b/src/Traversal.java @@ -1,5 +1,145 @@ +import java.util.HashMap; +import java.util.LinkedList; +import java.util.Map; +import java.util.Queue; +import java.util.Stack; + public class Traversal { public static void main(String[] args) { + TreeNode root = new TreeNode<>(10, null, null); + + root.left = new TreeNode<>(9, null, null); + root.right = new TreeNode<>(15, null, null); + + root.left.left = new TreeNode<>(5, null, null); + root.left.right = new TreeNode<>(2, null, null); + + root.right.left = new TreeNode<>(-3, null, null); + root.right.right = new TreeNode<>(5, null, null); + + root.right.right.right = new TreeNode<>(22, null, null); + + TreeNode stringRoot = new TreeNode("hello", null, null); + stringRoot.left = new TreeNode("how", null, null); + stringRoot.right = new TreeNode("are", null, null); + + stringRoot.left.left = new TreeNode("you", null, null); + stringRoot.left.right = new TreeNode("I", null, null); + + stringRoot.right.left = new TreeNode("am", null, null); + stringRoot.right.right = new TreeNode("so", null, null); + + stringRoot.right.right.right = new TreeNode("good", null, null); + + TreeNode megaRoot = new TreeNode<>(1, null, null); + + TreeNode current = megaRoot; + for (int i = 2; i < 50001; i++){ + current.right = new TreeNode(i, null, null); + current = current.right; + } + + levelOrder(root); + //preorder(megaRoot); + + // System.out.println("Preorder recursive"); + // preorder(root); + // System.out.println("Preorder iterative"); + // preOrderIter(megaRoot); + + // preorder(root); + //postorder(root); + // inorder(stringRoot); + + //allows it to fail at compile time rather than runtime + // printGreater(root, 100); + + // System.out.println(toMap(stringRoot)); + } + + public static void preOrderIter(TreeNode node){ + Stack> stack = new Stack<>(); + stack.push(node); + + while (!stack.empty()){ + TreeNode current = stack.pop(); + if (current == null) continue; + System.out.println(current.value); + stack.push(current.right); + stack.push(current.left); + } + } + + public static void levelOrder(TreeNode node){ + Queue> queue = new LinkedList<>(); + queue.add(node); + + while (!queue.isEmpty()){ + TreeNode current = queue.poll(); + if (current == null){ + continue; + } + + System.out.println(current.value); + queue.add(current.left); + queue.add(current.right); + } + } + + public static void preorder(TreeNode current1){ + + if (current1 == null) return; + + System.out.println(current1.value); + + if (current1.left != null) preorder(current1.left); + + if (current1.right != null) preorder(current1.right); + } + + public static Map toMap(TreeNode node){ + Map counts = new HashMap<>(); + toMapHelper(node, counts); + return counts; + } + + private static void toMapHelper(TreeNode node, Map counts){ + if (node == null) return; + + counts.put(node.value, counts.getOrDefault(node.value, 0) + 1); + toMapHelper(node.left, counts); + toMapHelper(node.right, counts); + } + + public static int countNodes(TreeNode node){ + if (node == null) return 0; + // int leftCount = countNodes(node.left); + // int rightCount = countNodes(node.right); + // int overallCount = leftCount + rightCount + 1; + // return overallCount; + + return countNodes(node.left) + countNodes(node.right) + 1; + } + + + public static void printGreater(TreeNode node, int threshold){ + if (node == null) return; + if (node.value > threshold) System.out.println(node.value); + printGreater(node.left, threshold); + printGreater(node.right, threshold); + } + + public static void postorder(TreeNode node){ + if (node == null) return; + postorder(node.left); + postorder(node.right); + System.out.println(node.value); + } + public static void inorder(TreeNode node){ + if (node == null) return; + inorder(node.left); + System.out.println(node.value); + inorder(node.right); } } diff --git a/src/TraversalTest.java b/src/TraversalTest.java index df275f1..d9b1704 100644 --- a/src/TraversalTest.java +++ b/src/TraversalTest.java @@ -1,5 +1,5 @@ -import org.junit.jupiter.api.Test; +// import org.junit.jupiter.api.Test; -public class TraversalTest { - -} +// public class TraversalTest { + +// } diff --git a/src/TreeNode.java b/src/TreeNode.java index acd9639..3075ae1 100644 --- a/src/TreeNode.java +++ b/src/TreeNode.java @@ -1,4 +1,11 @@ -public class TreeNode { - - +public class TreeNode { + public T value; + public TreeNode left; + public TreeNode right; + + public TreeNode(T data, TreeNode left, TreeNode right){ + this.value = data; + this.left = left; + this.right = right; + } } \ No newline at end of file