From e4e2a455b2a8831caf624f514790a83508b210e2 Mon Sep 17 00:00:00 2001 From: allenres Date: Thu, 12 Feb 2026 14:45:23 -0800 Subject: [PATCH 1/3] finished assignment --- src/Traversal.java | 38 ++++++++++++++++++++++++++++++++++++++ src/TreeNode.java | 8 ++++++++ 2 files changed, 46 insertions(+) diff --git a/src/Traversal.java b/src/Traversal.java index 8da0f79..42a6744 100644 --- a/src/Traversal.java +++ b/src/Traversal.java @@ -1,5 +1,43 @@ public class Traversal { public static void main(String[] args) { + TreeNode root = new TreeNode(10, null, null); + root.left = new TreeNode(9, null, null); + root.left.left = new TreeNode(5, null, null); + root.left.right = new TreeNode(2, null, null); + root.right = new TreeNode(15, 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); + + // preOrder(root); + System.out.println(); + // postOrder(root); + inOrder(root); + } + + // Print tree rooted at the given node in pre-order. + public static void preOrder(TreeNode node) { + if (node == null) + return; + System.out.println(node.value); + preOrder(node.left); + preOrder(node.right); + } + + 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/TreeNode.java b/src/TreeNode.java index acd9639..757660e 100644 --- a/src/TreeNode.java +++ b/src/TreeNode.java @@ -1,4 +1,12 @@ public class TreeNode { + public int value; + public TreeNode left; + public TreeNode right; + public TreeNode(int value, TreeNode left, TreeNode right) { + this.value = value; + this.left = left; + this.right = right; + } } \ No newline at end of file From 72d5679bd82081614f4dbb76b6efc0faa0d1f2c7 Mon Sep 17 00:00:00 2001 From: allenres Date: Tue, 17 Feb 2026 14:37:00 -0800 Subject: [PATCH 2/3] generics and recursive functions --- src/Traversal.java | 52 ++++++++++++++++++++++++++++++++++------------ src/TreeNode.java | 10 ++++----- 2 files changed, 44 insertions(+), 18 deletions(-) diff --git a/src/Traversal.java b/src/Traversal.java index 42a6744..d9237a2 100644 --- a/src/Traversal.java +++ b/src/Traversal.java @@ -1,31 +1,57 @@ public class Traversal { public static void main(String[] args) { - TreeNode root = new TreeNode(10, null, null); - root.left = new TreeNode(9, null, null); - root.left.left = new TreeNode(5, null, null); - root.left.right = new TreeNode(2, null, null); + TreeNode root = new TreeNode(10, null, null); + root.left = new TreeNode(9, null, null); + root.left.left = new TreeNode(5, null, null); + root.left.right = new TreeNode(2, null, null); - root.right = new TreeNode(15, 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); + root.right = new TreeNode(15, 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.left.left = new TreeNode("are", null, null); + stringRoot.left.right = new TreeNode("you", null, null); + + stringRoot.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); // preOrder(root); System.out.println(); // postOrder(root); - inOrder(root); + //printGrader(root, 100); + System.out.println(countNodes(stringRoot)); + } + + public static int countNodes(TreeNode node) { + return node == null ? 0 : 1 + countNodes(node.left) + countNodes(node.right); + } + + public static void printGrader(TreeNode node, int threshold) { + if (node == null) return; + if(node.value > threshold) { + System.out.println(node.value); + } + printGrader(node.left, threshold); + printGrader(node.right, threshold); } // Print tree rooted at the given node in pre-order. - public static void preOrder(TreeNode node) { + // ? if you dont need to reuse it, parameterize + public static void preOrder(TreeNode node) { if (node == null) - return; + return; System.out.println(node.value); preOrder(node.left); preOrder(node.right); } - public static void postOrder(TreeNode node) { + // type variable if you need to reuse it + public static void postOrder(TreeNode node) { if (node == null) return; postOrder(node.left); @@ -33,7 +59,7 @@ public static void postOrder(TreeNode node) { System.out.println(node.value); } - public static void inOrder(TreeNode node) { + public static void inOrder(TreeNode node) { if (node == null) return; inOrder(node.left); diff --git a/src/TreeNode.java b/src/TreeNode.java index 757660e..1dbf298 100644 --- a/src/TreeNode.java +++ b/src/TreeNode.java @@ -1,9 +1,9 @@ -public class TreeNode { - public int value; - public TreeNode left; - public TreeNode right; +public class TreeNode{ + public T value; + public TreeNode left; + public TreeNode right; - public TreeNode(int value, TreeNode left, TreeNode right) { + public TreeNode(T value, TreeNode left, TreeNode right) { this.value = value; this.left = left; this.right = right; From 02e76b1c81cf278fe644ba8c90be431d5e4efef1 Mon Sep 17 00:00:00 2001 From: allenres Date: Tue, 24 Feb 2026 14:45:53 -0800 Subject: [PATCH 3/3] BFS implementation --- src/Traversal.java | 94 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 82 insertions(+), 12 deletions(-) diff --git a/src/Traversal.java b/src/Traversal.java index d9237a2..10ee660 100644 --- a/src/Traversal.java +++ b/src/Traversal.java @@ -1,3 +1,11 @@ +import static org.junit.jupiter.api.DynamicTest.stream; + +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); @@ -12,32 +20,65 @@ public static void main(String[] args) { TreeNode stringRoot = new TreeNode("hello", null, null); stringRoot.left = new TreeNode("How", null, null); - stringRoot.left.left = new TreeNode("are", null, null); - stringRoot.left.right = new TreeNode("you", null, null); + stringRoot.left.left = new TreeNode("and", null, null); + stringRoot.left.right = new TreeNode("and", null, null); stringRoot.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 <= 50000; i++) { + current.right = new TreeNode(i, null, null); + current = current.right; + } + + levelOrderIter(root); + + //preOrderIter(megaRoot); + // System.out.println("Preorder Recursive"); + // preOrder(root); + + // System.out.println("Preorder Iterative"); + // preOrderIter(root); + // preOrder(root); System.out.println(); // postOrder(root); //printGrader(root, 100); - System.out.println(countNodes(stringRoot)); + // System.out.println(countNodes(stringRoot)); + + //System.out.println(toMap(stringRoot)); } - public static int countNodes(TreeNode node) { - return node == null ? 0 : 1 + countNodes(node.left) + countNodes(node.right); + public static void preOrderIter(TreeNode node) { + Stack> stack = new Stack<>(); + stack.push(node); + while(!stack.isEmpty()) { + TreeNode currentNode = stack.pop(); + + if(currentNode == null) continue; // move onto next iteration, will not stop loop + + System.out.println(currentNode.value); + stack.push(currentNode.right); + stack.push(currentNode.left); + } } - public static void printGrader(TreeNode node, int threshold) { - if (node == null) return; - if(node.value > threshold) { - System.out.println(node.value); - } - printGrader(node.left, threshold); - printGrader(node.right, threshold); + public static void levelOrderIter(TreeNode node) { + Queue> queue = new LinkedList<>(); + queue.add(node); + while(!queue.isEmpty()) { + TreeNode currentNode = queue.remove(); + + if(currentNode == null) continue; // move onto next iteration, will not stop loop + + System.out.println(currentNode.value); + queue.add(currentNode.left); + queue.add(currentNode.right); + } } // Print tree rooted at the given node in pre-order. @@ -50,6 +91,35 @@ public static void preOrder(TreeNode node) { preOrder(node.right); } + public static Map toMap(TreeNode node) { + Map counts = new HashMap<>(); + toMap(node, counts); + return counts; + } + + private static void toMap(TreeNode node, Map counts) { + if(node == null) return; + // fill up those counts + counts.put(node.value, counts.getOrDefault(node.value, 0) + 1); + toMap(node.left, counts); + toMap(node.right, counts); + } + + public static int countNodes(TreeNode node) { + return node == null ? 0 : 1 + countNodes(node.left) + countNodes(node.right); + } + + public static void printGrader(TreeNode node, int threshold) { + if (node == null) return; + if(node.value > threshold) { + System.out.println(node.value); + } + printGrader(node.left, threshold); + printGrader(node.right, threshold); + } + + + // type variable if you need to reuse it public static void postOrder(TreeNode node) { if (node == null)