diff --git a/src/Traversal.java b/src/Traversal.java index 8da0f79..a89661b 100644 --- a/src/Traversal.java +++ b/src/Traversal.java @@ -1,5 +1,162 @@ + +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.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); + + TreeNode stringRoot = new TreeNode<>("root", null, null); + stringRoot.left = new TreeNode<>("9", null, null); + stringRoot.left.left = new TreeNode<>("5", null, null); + stringRoot.left.right = new TreeNode<>("2", null, null); + + stringRoot.right = new TreeNode<>("15", null, null); + stringRoot.right.left = new TreeNode<>("-3", null, null); + stringRoot.right.right = new TreeNode<>("5", null, null); + stringRoot.right.right.right = new TreeNode<>("22", null, null); + + //System.out.println(stringRoot.left.right.value); + // preOrder(stringRoot); + // System.out.println(); + // postOrder(stringRoot); + // System.out.println(); + // inOrder(stringRoot); + // System.out.println(); + + // printGreater(root, 5); + + // System.out.println(countNode(root)); + + // System.out.println(toMap(stringRoot)); + + TreeNode megaRoot = new TreeNode(1, null, null); + + TreeNode current = megaRoot; + + for (int i = 2; i <= 5000; i++) { + current.right = new TreeNode(i, null, null); + current = current.right; + } + levelOrderIter(root); + } + + 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.print(current.value + " "); + stack.push(current.left); + stack.push(current.right); + } } + public static void levelOrderIter(TreeNode node){ + Queue> stack = new LinkedList<>(); + + stack.add(node); + + while(!stack.isEmpty()){ + TreeNode current = stack.poll(); + if(current == null) continue; + System.out.print(current.value + " "); + stack.add(current.left); + stack.add(current.right); + } + } + + public static int countNode(TreeNode node){ + if(node == null) return 0; + return countNode(node.left) + countNode(node.right) + 1; + //if(node != null) {return countNode(node.left) + countNode(node.right) + 1;} else return 0; + } + public static void printGreater(TreeNode node, int threshold){ + + if(node == null) return; + if(node.value > threshold){ + System.out.print(node.value + " "); + } + printGreater(node.left, threshold); + printGreater(node.right, threshold); + } + + public static void preOrder(TreeNode node) { + if(node == null) return; + System.out.print(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.print(node.value + " "); + } + public static void inOrder(TreeNode node) { + if(node == null) return; + inOrder(node.left); + System.out.print(node.value + " "); + inOrder(node.right); + } + + public static Map toMap(TreeNode node){ + Map returnMap = new HashMap<>(); + toMap(node, returnMap); + return returnMap; + } + private static void toMap(TreeNode node, Map returnMap){ + if(node == null) return; + returnMap.put(node.value, returnMap.getOrDefault(node.value, 0) + 1); + + toMap(node.left, returnMap); + toMap(node.right, returnMap); + } + + //These are all how I initially built the methods ahead of you: + + // public static void preOrder(TreeNode node){ + // System.out.print(node.value + " "); + // if(node.left != null){ + // preOrder(node.left); + // } + // if(node.right != null){ + // preOrder(node.right); + // } + // } + // public static void postOrder(TreeNode node){ + + // if(node.left != null){ + // postOrder(node.left); + // } + // if(node.right != null){ + // postOrder(node.right); + // } + // System.out.print(node.value + " "); + // } + // public static void inOrder(TreeNode node){ + + // if(node.left != null){ + // inOrder(node.left); + // } + // System.out.print(node.value + " "); + // if(node.right != null){ + // inOrder(node.right); + // } + + // } } diff --git a/src/TreeNode.java b/src/TreeNode.java index acd9639..b1fff5c 100644 --- a/src/TreeNode.java +++ b/src/TreeNode.java @@ -1,4 +1,14 @@ -public class TreeNode { +public class TreeNode { - + public T value; + + public TreeNode left; + public TreeNode right; + + + public TreeNode(T value, TreeNode left, TreeNode right){ + this.value = value; + this.left = left; + this.right = right; + } } \ No newline at end of file