From 42a1987b1de75816702816d90d91a8dbeaa31158 Mon Sep 17 00:00:00 2001 From: anthonykravchishin Date: Thu, 12 Feb 2026 14:46:07 -0800 Subject: [PATCH 1/4] completed assignment --- src/Traversal.java | 34 ++++++++++++++++++++++++++++++++++ src/TreeNode.java | 9 ++++++++- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/Traversal.java b/src/Traversal.java index 8da0f79..19587a4 100644 --- a/src/Traversal.java +++ b/src/Traversal.java @@ -1,5 +1,39 @@ 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); + + postorder(root); + } + + // print a 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); + } + + // print a tree rooted at the given node in-order + public static void inorder(TreeNode node) { + if (node == null) return; + inorder(node.left); + System.out.println(node.value); + inorder(node.right); + } + + // print a tree rooted at the given node in post-order + public static void postorder(TreeNode node) { + if (node == null) return; + postorder(node.left); + postorder(node.right); + System.out.println(node.value); } } diff --git a/src/TreeNode.java b/src/TreeNode.java index acd9639..a2959d4 100644 --- a/src/TreeNode.java +++ b/src/TreeNode.java @@ -1,4 +1,11 @@ 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 89dbfac34ab1c6dc770285cfff7dfc63a01fa53a Mon Sep 17 00:00:00 2001 From: anthonykravchishin Date: Tue, 17 Feb 2026 14:37:49 -0800 Subject: [PATCH 2/4] Tree Traversals with generic types --- src/Traversal.java | 44 ++++++++++++++++++++++++++++++++------------ src/TreeNode.java | 10 +++++----- 2 files changed, 37 insertions(+), 17 deletions(-) diff --git a/src/Traversal.java b/src/Traversal.java index 19587a4..9a28e2a 100644 --- a/src/Traversal.java +++ b/src/Traversal.java @@ -1,20 +1,40 @@ 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); - postorder(root); + 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); + + + // postorder(root); + // printGreater(root, 4); + System.out.println(countNodes(root)); + } + + public static int countNodes(TreeNode node) { + if (node == null) return 0; + return 1 + countNodes(node.left) + countNodes(node.right); + } + + 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); } // print a tree rooted at the given node in pre-order - public static void preorder(TreeNode node) { + public static void preorder(TreeNode node) { if (node == null) return; System.out.println(node.value); preorder(node.left); @@ -22,7 +42,7 @@ public static void preorder(TreeNode node) { } // print a tree rooted at the given node in-order - public static void inorder(TreeNode node) { + public static void inorder(TreeNode node) { if (node == null) return; inorder(node.left); System.out.println(node.value); @@ -30,7 +50,7 @@ public static void inorder(TreeNode node) { } // print a tree rooted at the given node in post-order - public static void postorder(TreeNode node) { + public static void postorder(TreeNode node) { if (node == null) return; postorder(node.left); postorder(node.right); diff --git a/src/TreeNode.java b/src/TreeNode.java index a2959d4..7d311f0 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 6d066861490585d3ae4ff8ceb28114d50fbe16f4 Mon Sep 17 00:00:00 2001 From: anthonykravchishin Date: Thu, 19 Feb 2026 14:30:30 -0800 Subject: [PATCH 3/4] Added toMap method --- src/Traversal.java | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/Traversal.java b/src/Traversal.java index 9a28e2a..a01c152 100644 --- a/src/Traversal.java +++ b/src/Traversal.java @@ -1,3 +1,6 @@ +import java.util.HashMap; +import java.util.Map; + public class Traversal { public static void main(String[] args) { TreeNode root = new TreeNode<>(10, null, null); @@ -14,11 +17,16 @@ public static void main(String[] args) { 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<>("hello", null, null); + stringRoot.right.left = new TreeNode<>("I'm", null, null); + stringRoot.right.right = new TreeNode<>("good", null, null); + // postorder(root); // printGreater(root, 4); - System.out.println(countNodes(root)); + // System.out.println(countNodes(root)); + System.out.println(toMap(stringRoot)); } public static int countNodes(TreeNode node) { @@ -33,6 +41,22 @@ public static void printGreater(TreeNode node, int threshold) { printGreater(node.right, threshold); } + 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 Map toMap(TreeNode node) { + Map counts = new HashMap<>(); + toMap(node, counts); + return counts; + } + // print a tree rooted at the given node in pre-order public static void preorder(TreeNode node) { if (node == null) return; From 951d7cd80dec332c6a7d61bf47e0680802dd369e Mon Sep 17 00:00:00 2001 From: anthonykravchishin Date: Tue, 24 Feb 2026 15:57:27 -0800 Subject: [PATCH 4/4] Worked on non-recursive tree methods --- src/Traversal.java | 73 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 59 insertions(+), 14 deletions(-) diff --git a/src/Traversal.java b/src/Traversal.java index a01c152..ed538f6 100644 --- a/src/Traversal.java +++ b/src/Traversal.java @@ -1,5 +1,8 @@ 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) { @@ -21,22 +24,70 @@ public static void main(String[] args) { stringRoot.right.left = new TreeNode<>("I'm", null, null); stringRoot.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; + } + + // preOrderIter(megaRoot); + // System.out.println("Preorder recursive"); + // preorder(root); + // System.out.println("Preorder iterative"); + // preOrderIter(root); // postorder(root); // printGreater(root, 4); // System.out.println(countNodes(root)); - System.out.println(toMap(stringRoot)); + // System.out.println(toMap(stringRoot)); + } + + // print a 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 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.remove(); + if (current == null) continue; + System.out.println(current.value); + queue.add(current.left); + queue.add(current.right); + } } public static int countNodes(TreeNode node) { - if (node == null) return 0; + if (node == null) + return 0; return 1 + countNodes(node.left) + countNodes(node.right); } public static void printGreater(TreeNode node, int threshold) { - if (node == null) return; - if (node.value > threshold) System.out.println(node.value); + if (node == null) + return; + if (node.value > threshold) + System.out.println(node.value); printGreater(node.left, threshold); printGreater(node.right, threshold); } @@ -57,17 +108,10 @@ public static Map toMap(TreeNode node) { return counts; } - // print a 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); - } - // print a tree rooted at the given node in-order public static void inorder(TreeNode node) { - if (node == null) return; + if (node == null) + return; inorder(node.left); System.out.println(node.value); inorder(node.right); @@ -75,7 +119,8 @@ public static void inorder(TreeNode node) { // print a tree rooted at the given node in post-order public static void postorder(TreeNode node) { - if (node == null) return; + if (node == null) + return; postorder(node.left); postorder(node.right); System.out.println(node.value);