From 6eade29e5b744366f15c8ac68b1c2b9ce67fc845 Mon Sep 17 00:00:00 2001 From: Eden Garza Date: Sat, 6 Aug 2022 19:36:38 -0700 Subject: [PATCH 1/5] first pass writing section on trees --- .../java-datastructures/trees/_index.md | 7 +++ .../java-datastructures/trees/introduction.md | 29 +++++++++++ .../java-datastructures/trees/methods.md | 49 +++++++++++++++++++ .../java-datastructures/trees/problem-1.md | 40 +++++++++++++++ 4 files changed, 125 insertions(+) create mode 100644 content/english/java-datastructures/trees/_index.md 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..32b854bb5c --- /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/introduction.md b/content/english/java-datastructures/trees/introduction.md new file mode 100644 index 0000000000..46bbcdc09c --- /dev/null +++ b/content/english/java-datastructures/trees/introduction.md @@ -0,0 +1,29 @@ +--- +title: "Introduction" +date: 2022-08-06T13:24:17-07:00 +draft: false +weight: 1 +--- + +Trees are made up of two components: **edges** and **nodes**. Let's take a look at each of these components in a bit more detail. + +### Edges + +You can imagine an edge as the line that connects two nodes. Edges always connect exactly two nodes. Edges can carry some information, but they don't need to. + +### Nodes + +Nodes are just points on a tree that represent some data. A tree needs at least one node and each node can have as many edges as it wants, as long as there is another different node that it is connected to. + +### Why Trees? + +Trees are very simple data structures that can store a lot of data while still allowing you to find it quickly. Many algorithms that rely on finding the best match organize their data in a tree before searching to optimize their speed. Some examples of trees being used in the real world include: +* [Spanning Tree Protocol](https://en.wikipedia.org/wiki/Spanning_Tree_Protocol) - A protocol foundational to using the Internet, +* [Binary Search](https://en.wikipedia.org/wiki/Binary_search_algorithm) - One of the most efficient algorithms to search for data in a sorted set, +* [TreeMaps](https://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html) - 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 seem to 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! diff --git a/content/english/java-datastructures/trees/methods.md b/content/english/java-datastructures/trees/methods.md new file mode 100644 index 0000000000..03e9afa9a9 --- /dev/null +++ b/content/english/java-datastructures/trees/methods.md @@ -0,0 +1,49 @@ +--- +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 + +Here is an example of what a binary tree might look like. Take a look at each of the nodes and check for yourself that they follow the rules! + +## 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. + +// ADD PICTURES HERE + +## 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..4e9dad008c --- /dev/null +++ b/content/english/java-datastructures/trees/problem-1.md @@ -0,0 +1,40 @@ +--- +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! + + + +Congrats! If you've made it this far, then you have officially programmed binary search! + +**SPOILER** If you need a bit of help, click here to open 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; +} +``` \ No newline at end of file From 6f3c479f07b6b84d4b7194eed31bad672d6b74bd Mon Sep 17 00:00:00 2001 From: Eden Garza Date: Sun, 7 Aug 2022 11:57:35 -0700 Subject: [PATCH 2/5] using better way to hide the solution for trees --- content/english/java-datastructures/trees/problem-1.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/content/english/java-datastructures/trees/problem-1.md b/content/english/java-datastructures/trees/problem-1.md index 4e9dad008c..0f4268436e 100644 --- a/content/english/java-datastructures/trees/problem-1.md +++ b/content/english/java-datastructures/trees/problem-1.md @@ -16,7 +16,7 @@ Now that we know the basics of traversing through a tree, implement binary searc Congrats! If you've made it this far, then you have officially programmed binary search! -**SPOILER** If you need a bit of help, click here to open the solution: +{{% 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 @@ -37,4 +37,5 @@ public static Node findValue(Node root, int value) { // the correct value! return current; } -``` \ No newline at end of file +``` +{{% /showanswer %}} From 411fd4f2da345a548175f0cf2311da246c2df698 Mon Sep 17 00:00:00 2001 From: Eden Garza Date: Sun, 7 Aug 2022 12:02:11 -0700 Subject: [PATCH 3/5] emphasis on celebrating student success --- content/english/java-datastructures/trees/problem-1.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/english/java-datastructures/trees/problem-1.md b/content/english/java-datastructures/trees/problem-1.md index 0f4268436e..e90ef04d22 100644 --- a/content/english/java-datastructures/trees/problem-1.md +++ b/content/english/java-datastructures/trees/problem-1.md @@ -14,8 +14,6 @@ Now that we know the basics of traversing through a tree, implement binary searc -Congrats! If you've made it this far, then you have officially programmed binary search! - {{% showanswer "SPOILER: Click here if you need help with the solution!" %}} ```js javascript public static Node findValue(Node root, int value) { @@ -39,3 +37,5 @@ public static Node findValue(Node root, int value) { } ``` {{% /showanswer %}} + +### Congrats! If you've made it this far, then you have officially programmed binary search! From af997839521172d1be76694e0a37ceaf49cff82b Mon Sep 17 00:00:00 2001 From: Eden Garza Date: Sun, 7 Aug 2022 15:40:56 -0700 Subject: [PATCH 4/5] adding in picture and gif --- .../trees/img/binarysearch.gif | Bin 0 -> 40593 bytes .../java-datastructures/trees/img/tree.png | Bin 0 -> 14626 bytes .../java-datastructures/trees/introduction.md | 2 ++ .../java-datastructures/trees/methods.md | 4 +++- 4 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 content/english/java-datastructures/trees/img/binarysearch.gif create mode 100644 content/english/java-datastructures/trees/img/tree.png 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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 Date: Sun, 7 Aug 2022 16:08:24 -0700 Subject: [PATCH 5/5] adding in suggestions from PR --- content/english/java-datastructures/trees/_index.md | 2 +- content/english/java-datastructures/trees/introduction.md | 8 ++++---- content/english/java-datastructures/trees/methods.md | 5 +++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/content/english/java-datastructures/trees/_index.md b/content/english/java-datastructures/trees/_index.md index 32b854bb5c..49cf2b07f8 100644 --- a/content/english/java-datastructures/trees/_index.md +++ b/content/english/java-datastructures/trees/_index.md @@ -4,4 +4,4 @@ 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! +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/introduction.md b/content/english/java-datastructures/trees/introduction.md index bcd1ff5672..293e50f300 100644 --- a/content/english/java-datastructures/trees/introduction.md +++ b/content/english/java-datastructures/trees/introduction.md @@ -18,14 +18,14 @@ Nodes are just points on a tree that represent some data. A tree needs at least ### Why Trees? Trees are very simple data structures that can store a lot of data while still allowing you to find it quickly. Many algorithms that rely on finding the best match organize their data in a tree before searching to optimize their speed. Some examples of trees being used in the real world include: -* [Spanning Tree Protocol](https://en.wikipedia.org/wiki/Spanning_Tree_Protocol) - A protocol foundational to using the Internet, -* [Binary Search](https://en.wikipedia.org/wiki/Binary_search_algorithm) - One of the most efficient algorithms to search for data in a sorted set, -* [TreeMaps](https://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html) - The sibling to the HashMap data structure in Java that uses a tree to organize the data +* Spanning 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 seem to 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! +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 index 5490390d9c..147d2d60d1 100644 --- a/content/english/java-datastructures/trees/methods.md +++ b/content/english/java-datastructures/trees/methods.md @@ -14,7 +14,8 @@ The rules for a binary tree are: * nodes to the left are less than the current node * nodes to the right are greater than the current node -Here is an example of what a binary tree might look like. Take a look at each of the nodes and check for yourself that they follow the rules! +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 @@ -30,7 +31,7 @@ See if you can follow along with this example below. This is the same tree as be 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 +Imagine we have nodes that are defined like below: ```js javascript class Node { int value;