From eeac7dcf2f2ce24e971d49807048a56356b45de4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ed=C3=A9n=20Garza?= <33306040+edengarza@users.noreply.github.com> Date: Fri, 20 Sep 2024 00:30:05 -0500 Subject: [PATCH] Adding Trees to Java: Data Structures (#323) * first pass writing section on trees * using better way to hide the solution for trees * emphasis on celebrating student success * adding in picture and gif * adding in suggestions from PR --- .../java-datastructures/trees/_index.md | 7 +++ .../trees/img/binarysearch.gif | Bin 0 -> 40593 bytes .../java-datastructures/trees/img/tree.png | Bin 0 -> 14626 bytes .../java-datastructures/trees/introduction.md | 31 +++++++++++ .../java-datastructures/trees/methods.md | 52 ++++++++++++++++++ .../java-datastructures/trees/problem-1.md | 41 ++++++++++++++ 6 files changed, 131 insertions(+) create mode 100644 content/english/java-datastructures/trees/_index.md create mode 100644 content/english/java-datastructures/trees/img/binarysearch.gif create mode 100644 content/english/java-datastructures/trees/img/tree.png create mode 100644 content/english/java-datastructures/trees/introduction.md create mode 100644 content/english/java-datastructures/trees/methods.md create mode 100644 content/english/java-datastructures/trees/problem-1.md diff --git a/content/english/java-datastructures/trees/_index.md b/content/english/java-datastructures/trees/_index.md new file mode 100644 index 0000000000..49cf2b07f8 --- /dev/null +++ b/content/english/java-datastructures/trees/_index.md @@ -0,0 +1,7 @@ +--- +title: "Trees" +weight: 8 +draft: false +--- + +One more important data structure that is used in the development of other data structures and not easily seen is a **Tree**. There are many different types of trees each with their own unique purpose that you will find in differente areas across programming and computer science. Let's learn a little bit more about this behind-the-scenes data structure! diff --git a/content/english/java-datastructures/trees/img/binarysearch.gif b/content/english/java-datastructures/trees/img/binarysearch.gif new file mode 100644 index 0000000000000000000000000000000000000000..4b2d86d4ef2ea8492c1f68d2f6a32f31e6783179 GIT binary patch literal 40593 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̃A1RkVKPYzC-HjoM(3 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 Tree Protocol - A protocol foundational to using the Internet, +* Binary Search - One of the most efficient algorithms to search for data in a sorted set, +* TreeMaps - The sibling to the HashMap data structure in Java that uses a tree to organize the data + +Some trees have more specific rules about how data is added to them and how the data inside is maintained, which means that there is almost always a tree ready for any scenario. + +## Visualizing Trees + +Trees will have what is called a **root node**, which is the node where the rest of the tree connects to, either directly or indirectly. We call this data structure a tree because nodes branch off of the root node. When you see a tree drawn, you will usually see the root node at the top, but that won't always be the case! + +![image](../img/tree.png) diff --git a/content/english/java-datastructures/trees/methods.md b/content/english/java-datastructures/trees/methods.md new file mode 100644 index 0000000000..147d2d60d1 --- /dev/null +++ b/content/english/java-datastructures/trees/methods.md @@ -0,0 +1,52 @@ +--- +title: "Methods" +date: 2022-08-06T13:24:17-07:00 +draft: false +weight: 2 +--- + +## Binary Trees + +Trees are a special type of data structure because they are made up of a collection of nodes connected by edges. There isn't a one stop initializer to create a new, generic tree like the other data structures we've looked at. To make things easier, we will look specifically at **Binary Trees**, which are a specific type of tree with strict rules about where each node should go. + +The rules for a binary tree are: +* each node has exactly two edges, a left node and a right node +* nodes to the left are less than the current node +* nodes to the right are greater than the current node + +The tree we looked at before is an example of a binary tree. Take a look at each of the nodes and check for yourself that they follow the rules! +![image](../img/tree.png) + +## Searching Elements + +Before we look at the implementation of how to search with code, let's look at how a binary tree might search for an element. When we are examining the elements within a tree, we always start at the root node, which in a binary tree should be more or less the middle of the data. + +Once we start at the root, we examine the value and ask ourselves "is the value we are looking for less than, equal to, or greater than this value?" If the value is equal, great! We found our answer. If the value we want is less than what we currently have, then we go the left node and ask ourselves the same question. If the value we want is greater than what we currently havbe, then we go to the right node and ask ourselves the same question. + +See if you can follow along with this example below. This is the same tree as before and we want to find the value 9. + +![image](../img/binarysearch.gif) + +## Traverse Elements + +Now that we conceptually understand searching for elements, we can see that searching for elements is just repeating the same operation over and over again. This means that if we program the operation correctly, the entire search algorithm is done. + +Imagine we have nodes that are defined like below: +```js javascript +class Node { + int value; + Node left; + Node right; +} +``` + +We now can apply the logic for finding the right element that we talked about in the section above. Consider this code snippet: +```js javascript +Node current = root; +if (current.value < desired) { + current = root.right; +} else if (current.value > desired) { + current = root.left; +} +``` +We can see that this takes us from one step to the next, we could then use this logic in a `for` loop until we find the value we want. diff --git a/content/english/java-datastructures/trees/problem-1.md b/content/english/java-datastructures/trees/problem-1.md new file mode 100644 index 0000000000..e90ef04d22 --- /dev/null +++ b/content/english/java-datastructures/trees/problem-1.md @@ -0,0 +1,41 @@ +--- +title: "Problem 1: Tree Basics" +date: 2022-08-06T13:24:17-07:00 +draft: false +weight: 3 +--- + +## Task 1: Find a Value in a Binary Tree + +Now that we know the basics of traversing through a tree, implement binary search based on the process (or algorithm) we talked about in the previous page. Here's a quick refresher: +* If the current value is less than what we want, go to the right node. +* If the current value is more than what we want, go to the left node. +* If the current value is what we want, you're done! + + + +{{% showanswer "SPOILER: Click here if you need help with the solution!" %}} +```js javascript +public static Node findValue(Node root, int value) { + // We start at the root of the tree + Node current = root; + + // We follow the logic we described above + while (current.value != value) { + System.out.println("current value is: " + current.value); + if (value < current.value) { + current = current.left; + } + if (value > current.value) { + current = current.right; + } + } + + // If we are here, we reached the node with + // the correct value! + return current; +} +``` +{{% /showanswer %}} + +### Congrats! If you've made it this far, then you have officially programmed binary search!