Typo: Edited Math for finding parent node (#34647)
This commit is contained in:
parent
6cff62641c
commit
088acf45d9
@ -10,13 +10,17 @@ Now we will move on to another tree data structure, the binary heap. A binary he
|
||||
While binary heaps may be implemented as tree structures with nodes that contain left and right references, the partial ordering according to the heap property allows us to represent the heap with an array. The parent-children relationship is what we're interested in and with simple arithmetic we can compute the children of any parent and the parent of any child node.
|
||||
For instance, consider this array representation of a binary min heap:
|
||||
<code>[ 6, 22, 30, 37, 63, 48, 42, 76 ]</code>
|
||||
The root node is the first element, 6. Its children are 22 and 30. If we look at the relationship between the array indices of these values, for index i the children are 2 * i + 1 and 2 * i + 2. Similarly, the element at index 0 is the parent of these two children at indices 1 and 2. More generally, we can find the parent of a node at any index with the following: (i - 1) / 2. These patterns will hold true as the binary tree grows to any size. Finally, we can make a slight adjustment to make this arithmetic even easier by skipping the first element in the array. Doing this creates the following relationship for any element at a given index i:
|
||||
The root node is the first element, 6. Its children are 22 and 30. If we look at the relationship between the array indices of these values, for index i the children are 2 * i + 1 and 2 * i + 2. Similarly, the element at index 0 is the parent of these two children at indices 1 and 2. More generally, we can find the parent of a node at any index with the following: Math.floor( (i - 1) / 2 ). These patterns will hold true as the binary tree grows to any size. Finally, we can make a slight adjustment to make this arithmetic even easier by skipping the first element in the array. Doing this creates the following relationship for any element at a given index i:
|
||||
Example Array representation:
|
||||
<code>[ null, 6, 22, 30, 37, 63, 48, 42, 76 ]</code>
|
||||
An element's left child: i * 2
|
||||
An element's right child: i * 2 + 1
|
||||
An element's parent: i / 2
|
||||
An element's parent: Math.floor( i / 2 )
|
||||
Once you wrap your head around the math, using an array representation is very useful because node locations can be quickly determined with this arithmetic and memory usage is diminished because you don't need to maintain references to child nodes.
|
||||
</section>
|
||||
|
||||
## Instructions
|
||||
<section id='instructions'>
|
||||
Instructions: Here we will create a max heap. Start by just creating an insert method which adds elements to our heap. During insertion, it is important to always maintain the heap property. For a max heap this means the root element should always have the greatest value in the tree and all parent nodes should be greater than their children. For an array implementation of a heap, this is typically accomplished in three steps:
|
||||
Add the new element to the end of the array.
|
||||
If the element is larger than its parents, switch them.
|
||||
@ -24,11 +28,6 @@ Continue switching until the new element is either smaller than its parent or yo
|
||||
Finally, add a print method which returns an array of all the items that have been added to the heap.
|
||||
</section>
|
||||
|
||||
## Instructions
|
||||
<section id='instructions'>
|
||||
|
||||
</section>
|
||||
|
||||
## Tests
|
||||
<section id='tests'>
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user