mirror of
https://github.com/donnemartin/interactive-coding-challenges.git
synced 2024-03-22 13:11:13 +08:00
Fix typos (#191)
This commit is contained in:
parent
cd9e9654bc
commit
9f89a51aba
|
@ -51,7 +51,7 @@ Refer to [Accessing the Challenges](https://github.com/donnemartin/interactive-c
|
||||||
### Adding New Solutions to Existing Challenges
|
### Adding New Solutions to Existing Challenges
|
||||||
|
|
||||||
Challenges have multiple solutions. If adding new solutions to existing challenges:
|
Challenges have multiple solutions. If adding new solutions to existing challenges:
|
||||||
* Add your algorithm discusion and code solution to the existing notebook
|
* Add your algorithm discussion and code solution to the existing notebook
|
||||||
* Update the unit test to include your solution
|
* Update the unit test to include your solution
|
||||||
* Verify your code passes the unit tests
|
* Verify your code passes the unit tests
|
||||||
|
|
||||||
|
|
|
@ -443,7 +443,7 @@ interactive-coding-challenges # Repo
|
||||||
├─ ...
|
├─ ...
|
||||||
```
|
```
|
||||||
|
|
||||||
<i>\*The notebooks (.pynb) read/write the associated unit test (.py) file.</i>
|
<i>\*The notebooks (.ipynb) read/write the associated unit test (.py) file.</i>
|
||||||
|
|
||||||
|
|
||||||
## Notebook Installation
|
## Notebook Installation
|
||||||
|
|
|
@ -164,7 +164,7 @@
|
||||||
"* Scan each character\n",
|
"* Scan each character\n",
|
||||||
"* For each character:\n",
|
"* For each character:\n",
|
||||||
" * Scan all [other] characters in the array\n",
|
" * Scan all [other] characters in the array\n",
|
||||||
" * Exluding the current character from the scan is rather tricky in Python and results in a non-Pythonic solution\n",
|
" * Excluding the current character from the scan is rather tricky in Python and results in a non-Pythonic solution\n",
|
||||||
" * If there is a match, return False\n",
|
" * If there is a match, return False\n",
|
||||||
"* Return True\n",
|
"* Return True\n",
|
||||||
"\n",
|
"\n",
|
||||||
|
|
|
@ -74,7 +74,7 @@
|
||||||
"source": [
|
"source": [
|
||||||
"## Algorithm\n",
|
"## Algorithm\n",
|
||||||
"\n",
|
"\n",
|
||||||
"We'll use a recursive solution that valides left <= current < right, passing down the min and max values as we do a depth-first traversal.\n",
|
"We'll use a recursive solution that validates left <= current < right, passing down the min and max values as we do a depth-first traversal.\n",
|
||||||
"\n",
|
"\n",
|
||||||
"* If the node is None, return True\n",
|
"* If the node is None, return True\n",
|
||||||
"* If min is set and the node's value <= min, return False\n",
|
"* If min is set and the node's value <= min, return False\n",
|
||||||
|
@ -123,12 +123,12 @@
|
||||||
" raise TypeError('No root node')\n",
|
" raise TypeError('No root node')\n",
|
||||||
" return self._validate(self.root)\n",
|
" return self._validate(self.root)\n",
|
||||||
"\n",
|
"\n",
|
||||||
" def _validate(self, node, mininum=-sys.maxsize, maximum=sys.maxsize):\n",
|
" def _validate(self, node, minimum=-sys.maxsize, maximum=sys.maxsize):\n",
|
||||||
" if node is None:\n",
|
" if node is None:\n",
|
||||||
" return True\n",
|
" return True\n",
|
||||||
" if node.data <= mininum or node.data > maximum:\n",
|
" if node.data <= minimum or node.data > maximum:\n",
|
||||||
" return False\n",
|
" return False\n",
|
||||||
" if not self._validate(node.left, mininum, node.data):\n",
|
" if not self._validate(node.left, minimum, node.data):\n",
|
||||||
" return False\n",
|
" return False\n",
|
||||||
" if not self._validate(node.right, node.data, maximum):\n",
|
" if not self._validate(node.right, node.data, maximum):\n",
|
||||||
" return False\n",
|
" return False\n",
|
||||||
|
|
|
@ -93,17 +93,17 @@
|
||||||
"* incoming edge count (useful for algorithms such as topological sort)\n",
|
"* incoming edge count (useful for algorithms such as topological sort)\n",
|
||||||
"* adjacent nodes and edge weights\n",
|
"* adjacent nodes and edge weights\n",
|
||||||
"\n",
|
"\n",
|
||||||
"#### add_neighhbor\n",
|
"#### add_neighbor\n",
|
||||||
"\n",
|
"\n",
|
||||||
"* If the neighbor doesn't already exist as an adjacent node\n",
|
"* If the neighbor doesn't already exist as an adjacent node\n",
|
||||||
" * Update the adjancet nodes and edge weights\n",
|
" * Update the adjacent nodes and edge weights\n",
|
||||||
" * Increment the neighbor's incoming edge count\n",
|
" * Increment the neighbor's incoming edge count\n",
|
||||||
"\n",
|
"\n",
|
||||||
"Complexity:\n",
|
"Complexity:\n",
|
||||||
"* Time: O(1)\n",
|
"* Time: O(1)\n",
|
||||||
"* Space: O(1)\n",
|
"* Space: O(1)\n",
|
||||||
"\n",
|
"\n",
|
||||||
"#### remove_neighhbor\n",
|
"#### remove_neighbor\n",
|
||||||
"\n",
|
"\n",
|
||||||
"* If the neighbor exists as an adjacent node\n",
|
"* If the neighbor exists as an adjacent node\n",
|
||||||
" * Decrement the neighbor's incoming edge count\n",
|
" * Decrement the neighbor's incoming edge count\n",
|
||||||
|
|
|
@ -67,7 +67,7 @@
|
||||||
"source": [
|
"source": [
|
||||||
"## Test Cases\n",
|
"## Test Cases\n",
|
||||||
"\n",
|
"\n",
|
||||||
"The constaints state we don't have to check for negative edges, so we test with the general case.\n",
|
"The constraints state we don't have to check for negative edges, so we test with the general case.\n",
|
||||||
"\n",
|
"\n",
|
||||||
"<pre>\n",
|
"<pre>\n",
|
||||||
"graph.add_edge('a', 'b', weight=5)\n",
|
"graph.add_edge('a', 'b', weight=5)\n",
|
||||||
|
|
|
@ -66,7 +66,7 @@
|
||||||
"source": [
|
"source": [
|
||||||
"## Test Cases\n",
|
"## Test Cases\n",
|
||||||
"\n",
|
"\n",
|
||||||
"The constaints state we don't have to check for negative edges, so we test with the general case.\n",
|
"The constraints state we don't have to check for negative edges, so we test with the general case.\n",
|
||||||
"\n",
|
"\n",
|
||||||
"<pre>\n",
|
"<pre>\n",
|
||||||
"graph.add_edge('a', 'b', weight=5)\n",
|
"graph.add_edge('a', 'b', weight=5)\n",
|
||||||
|
|
|
@ -112,7 +112,7 @@
|
||||||
" self.mean = None\n",
|
" self.mean = None\n",
|
||||||
" # Mode\n",
|
" # Mode\n",
|
||||||
" self.array = [0] * (upper_limit + 1)\n",
|
" self.array = [0] * (upper_limit + 1)\n",
|
||||||
" self.mode_ocurrences = 0\n",
|
" self.mode_occurrences = 0\n",
|
||||||
" self.mode = None\n",
|
" self.mode = None\n",
|
||||||
"\n",
|
"\n",
|
||||||
" def insert(self, val):\n",
|
" def insert(self, val):\n",
|
||||||
|
@ -128,8 +128,8 @@
|
||||||
" self.mean = self.running_sum / self.num_items\n",
|
" self.mean = self.running_sum / self.num_items\n",
|
||||||
" # Calculate the mode\n",
|
" # Calculate the mode\n",
|
||||||
" self.array[val] += 1\n",
|
" self.array[val] += 1\n",
|
||||||
" if self.array[val] > self.mode_ocurrences:\n",
|
" if self.array[val] > self.mode_occurrences:\n",
|
||||||
" self.mode_ocurrences = self.array[val]\n",
|
" self.mode_occurrences = self.array[val]\n",
|
||||||
" self.mode = val"
|
" self.mode = val"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
|
@ -79,7 +79,7 @@
|
||||||
"\n",
|
"\n",
|
||||||
"borrow = (~a&b) << 1 = 0010\n",
|
"borrow = (~a&b) << 1 = 0010\n",
|
||||||
"\n",
|
"\n",
|
||||||
"If the borrow is not zero, we'll need to subtract the borrow from the result. Recusively call the function, passing in result and borrow.\n",
|
"If the borrow is not zero, we'll need to subtract the borrow from the result. Recursively call the function, passing in result and borrow.\n",
|
||||||
"\n",
|
"\n",
|
||||||
"Complexity:\n",
|
"Complexity:\n",
|
||||||
"* Time: O(b), where b is the number of bits\n",
|
"* Time: O(b), where b is the number of bits\n",
|
||||||
|
|
|
@ -74,7 +74,7 @@
|
||||||
"\n",
|
"\n",
|
||||||
"carry = (a&b) << 1 = 1010\n",
|
"carry = (a&b) << 1 = 1010\n",
|
||||||
"\n",
|
"\n",
|
||||||
"If the carry is not zero, we'll need to add the carry to the result. Recusively call the function, passing in result and carry.\n",
|
"If the carry is not zero, we'll need to add the carry to the result. Recursively call the function, passing in result and carry.\n",
|
||||||
"\n",
|
"\n",
|
||||||
"Below are the values of a, b, and the carry of a = 7 and b = 5, producing the result of 12.\n",
|
"Below are the values of a, b, and the carry of a = 7 and b = 5, producing the result of 12.\n",
|
||||||
"\n",
|
"\n",
|
||||||
|
|
|
@ -100,7 +100,7 @@
|
||||||
"from nose.tools import assert_equal\n",
|
"from nose.tools import assert_equal\n",
|
||||||
"\n",
|
"\n",
|
||||||
"\n",
|
"\n",
|
||||||
"class TestMaximingXor(object):\n",
|
"class TestMaximizingXor(object):\n",
|
||||||
"\n",
|
"\n",
|
||||||
" def test_maximizing_xor(self):\n",
|
" def test_maximizing_xor(self):\n",
|
||||||
" solution = Solution()\n",
|
" solution = Solution()\n",
|
||||||
|
@ -109,7 +109,7 @@
|
||||||
"\n",
|
"\n",
|
||||||
"\n",
|
"\n",
|
||||||
"def main():\n",
|
"def main():\n",
|
||||||
" test = TestMaximingXor()\n",
|
" test = TestMaximizingXor()\n",
|
||||||
" test.test_maximizing_xor()\n",
|
" test.test_maximizing_xor()\n",
|
||||||
"\n",
|
"\n",
|
||||||
"\n",
|
"\n",
|
||||||
|
|
|
@ -122,7 +122,7 @@
|
||||||
"from nose.tools import assert_equal\n",
|
"from nose.tools import assert_equal\n",
|
||||||
"\n",
|
"\n",
|
||||||
"\n",
|
"\n",
|
||||||
"class TestMaximingXor(object):\n",
|
"class TestMaximizingXor(object):\n",
|
||||||
"\n",
|
"\n",
|
||||||
" def test_maximizing_xor(self):\n",
|
" def test_maximizing_xor(self):\n",
|
||||||
" solution = Solution()\n",
|
" solution = Solution()\n",
|
||||||
|
@ -131,7 +131,7 @@
|
||||||
"\n",
|
"\n",
|
||||||
"\n",
|
"\n",
|
||||||
"def main():\n",
|
"def main():\n",
|
||||||
" test = TestMaximingXor()\n",
|
" test = TestMaximizingXor()\n",
|
||||||
" test.test_maximizing_xor()\n",
|
" test.test_maximizing_xor()\n",
|
||||||
"\n",
|
"\n",
|
||||||
"\n",
|
"\n",
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
from nose.tools import assert_equal
|
from nose.tools import assert_equal
|
||||||
|
|
||||||
|
|
||||||
class TestMaximingXor(object):
|
class TestMaximizingXor(object):
|
||||||
|
|
||||||
def test_maximizing_xor(self):
|
def test_maximizing_xor(self):
|
||||||
solution = Solution()
|
solution = Solution()
|
||||||
|
@ -10,7 +10,7 @@ class TestMaximingXor(object):
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
test = TestMaximingXor()
|
test = TestMaximizingXor()
|
||||||
test.test_maximizing_xor()
|
test.test_maximizing_xor()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
" * Yes\n",
|
" * Yes\n",
|
||||||
"* Can we get negative inputs?\n",
|
"* Can we get negative inputs?\n",
|
||||||
" * Yes\n",
|
" * Yes\n",
|
||||||
"* Can there be duplicate entires in the input?\n",
|
"* Can there be duplicate entries in the input?\n",
|
||||||
" * Yes\n",
|
" * Yes\n",
|
||||||
"* Will there always be at least three integers?\n",
|
"* Will there always be at least three integers?\n",
|
||||||
" * No\n",
|
" * No\n",
|
||||||
|
|
|
@ -37,7 +37,7 @@
|
||||||
" * Yes\n",
|
" * Yes\n",
|
||||||
"* Can we get negative inputs?\n",
|
"* Can we get negative inputs?\n",
|
||||||
" * Yes\n",
|
" * Yes\n",
|
||||||
"* Can there be duplicate entires in the input?\n",
|
"* Can there be duplicate entries in the input?\n",
|
||||||
" * Yes\n",
|
" * Yes\n",
|
||||||
"* Will there always be at least three integers?\n",
|
"* Will there always be at least three integers?\n",
|
||||||
" * No\n",
|
" * No\n",
|
||||||
|
|
|
@ -83,7 +83,7 @@
|
||||||
"\n",
|
"\n",
|
||||||
"borrow = (~a&b) << 1 = 0010\n",
|
"borrow = (~a&b) << 1 = 0010\n",
|
||||||
"\n",
|
"\n",
|
||||||
"If the borrow is not zero, we'll need to subtract the borrow from the result. Recusively call the function, passing in result and borrow.\n",
|
"If the borrow is not zero, we'll need to subtract the borrow from the result. Recursively call the function, passing in result and borrow.\n",
|
||||||
"\n",
|
"\n",
|
||||||
"Complexity:\n",
|
"Complexity:\n",
|
||||||
"* Time: O(b), where b is the number of bits\n",
|
"* Time: O(b), where b is the number of bits\n",
|
||||||
|
|
|
@ -78,7 +78,7 @@
|
||||||
"\n",
|
"\n",
|
||||||
"carry = (a&b) << 1 = 1010\n",
|
"carry = (a&b) << 1 = 1010\n",
|
||||||
"\n",
|
"\n",
|
||||||
"If the carry is not zero, we'll need to add the carry to the result. Recusively call the function, passing in result and carry.\n",
|
"If the carry is not zero, we'll need to add the carry to the result. Recursively call the function, passing in result and carry.\n",
|
||||||
"\n",
|
"\n",
|
||||||
"Below are the values of a, b, and the carry of a = 7 and b = 5, producing the result of 12.\n",
|
"Below are the values of a, b, and the carry of a = 7 and b = 5, producing the result of 12.\n",
|
||||||
"\n",
|
"\n",
|
||||||
|
|
|
@ -77,7 +77,7 @@
|
||||||
" * Else, recurse\n",
|
" * Else, recurse\n",
|
||||||
" * Backtrack by:\n",
|
" * Backtrack by:\n",
|
||||||
" * Removing the just added current char from the current results\n",
|
" * Removing the just added current char from the current results\n",
|
||||||
" * Incrementing the current char's acount in the dictionary\n",
|
" * Incrementing the current char's count in the dictionary\n",
|
||||||
"\n",
|
"\n",
|
||||||
"Complexity:\n",
|
"Complexity:\n",
|
||||||
"* Time: O(n!)\n",
|
"* Time: O(n!)\n",
|
||||||
|
|
|
@ -82,7 +82,7 @@
|
||||||
" * This avoids duplicate results such as 'ab' and 'bc'\n",
|
" * This avoids duplicate results such as 'ab' and 'bc'\n",
|
||||||
" * Backtrack by:\n",
|
" * Backtrack by:\n",
|
||||||
" * Removing the just added current char from the current results\n",
|
" * Removing the just added current char from the current results\n",
|
||||||
" * Incrementing the current char's acount in the dictionary\n",
|
" * Incrementing the current char's count in the dictionary\n",
|
||||||
"\n",
|
"\n",
|
||||||
"Complexity:\n",
|
"Complexity:\n",
|
||||||
"* Time: O(2^n)\n",
|
"* Time: O(2^n)\n",
|
||||||
|
|
|
@ -72,7 +72,7 @@
|
||||||
" * Break\n",
|
" * Break\n",
|
||||||
"\n",
|
"\n",
|
||||||
"Complexity:\n",
|
"Complexity:\n",
|
||||||
"* Time: O(n^2) avarage, worst. O(1) best if input is already sorted\n",
|
"* Time: O(n^2) average, worst. O(1) best if input is already sorted\n",
|
||||||
"* Space: O(1) for the iterative solution\n",
|
"* Space: O(1) for the iterative solution\n",
|
||||||
"\n",
|
"\n",
|
||||||
"Misc: \n",
|
"Misc: \n",
|
||||||
|
|
|
@ -69,7 +69,7 @@
|
||||||
"* Merge split arrays\n",
|
"* Merge split arrays\n",
|
||||||
" * Using two pointers, one for each half starting at index 0\n",
|
" * Using two pointers, one for each half starting at index 0\n",
|
||||||
" * Add the smaller element to the result array\n",
|
" * Add the smaller element to the result array\n",
|
||||||
" * Inrement pointer where smaller element exists\n",
|
" * Increment pointer where smaller element exists\n",
|
||||||
" * Copy remaining elements to the result array\n",
|
" * Copy remaining elements to the result array\n",
|
||||||
" * Return result array\n",
|
" * Return result array\n",
|
||||||
"\n",
|
"\n",
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
"source": [
|
"source": [
|
||||||
"## Constraints\n",
|
"## Constraints\n",
|
||||||
"\n",
|
"\n",
|
||||||
"* Is a naiive solution sufficient (ie not stable, not based on a heap)?\n",
|
"* Is a naive solution sufficient (ie not stable, not based on a heap)?\n",
|
||||||
" * Yes\n",
|
" * Yes\n",
|
||||||
"* Are duplicates allowed?\n",
|
"* Are duplicates allowed?\n",
|
||||||
" * Yes\n",
|
" * Yes\n",
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
"source": [
|
"source": [
|
||||||
"## Constraints\n",
|
"## Constraints\n",
|
||||||
"\n",
|
"\n",
|
||||||
"* Is a naiive solution sufficient (ie not stable, not based on a heap)?\n",
|
"* Is a naive solution sufficient (ie not stable, not based on a heap)?\n",
|
||||||
" * Yes\n",
|
" * Yes\n",
|
||||||
"* Are duplicates allowed?\n",
|
"* Are duplicates allowed?\n",
|
||||||
" * Yes\n",
|
" * Yes\n",
|
||||||
|
|
|
@ -55,7 +55,7 @@
|
||||||
"* Push/pop on empty stack\n",
|
"* Push/pop on empty stack\n",
|
||||||
"* Push/pop on non-empty stack\n",
|
"* Push/pop on non-empty stack\n",
|
||||||
"* Min on empty stack\n",
|
"* Min on empty stack\n",
|
||||||
"* Min on non-tempty stack"
|
"* Min on non-empty stack"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -54,7 +54,7 @@
|
||||||
"* Push/pop on empty stack\n",
|
"* Push/pop on empty stack\n",
|
||||||
"* Push/pop on non-empty stack\n",
|
"* Push/pop on non-empty stack\n",
|
||||||
"* Min on empty stack\n",
|
"* Min on empty stack\n",
|
||||||
"* Min on non-tempty stack"
|
"* Min on non-empty stack"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
"cell_type": "markdown",
|
"cell_type": "markdown",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"source": [
|
"source": [
|
||||||
"* [Constraits](#Constraint)\n",
|
"* [Constraints](#Constraints)\n",
|
||||||
"* [Test Cases](#Test-Cases)\n",
|
"* [Test Cases](#Test-Cases)\n",
|
||||||
"* [Algorithm](#Algorithm)\n",
|
"* [Algorithm](#Algorithm)\n",
|
||||||
"* [Code](#Code)\n",
|
"* [Code](#Code)\n",
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
"cell_type": "markdown",
|
"cell_type": "markdown",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"source": [
|
"source": [
|
||||||
"* [Constraits](#Constraint)\n",
|
"* [Constraints](#Constraints)\n",
|
||||||
"* [Test Cases](#Test-Cases)\n",
|
"* [Test Cases](#Test-Cases)\n",
|
||||||
"* [Algorithm](#Algorithm)\n",
|
"* [Algorithm](#Algorithm)\n",
|
||||||
"* [Code](#Code)\n",
|
"* [Code](#Code)\n",
|
||||||
|
|
|
@ -75,25 +75,25 @@ class BinaryTree (object):
|
||||||
parent.rightChild = current.rightChild
|
parent.rightChild = current.rightChild
|
||||||
|
|
||||||
else:
|
else:
|
||||||
succesor = current.rightChild
|
successor = current.rightChild
|
||||||
succesorParent = current
|
successorParent = current
|
||||||
|
|
||||||
while succesor.leftChild is not None:
|
while successor.leftChild is not None:
|
||||||
succesorParent = succesor
|
successorParent = successor
|
||||||
succesor = succesor.leftChild
|
successor = successor.leftChild
|
||||||
|
|
||||||
if current is self.root:
|
if current is self.root:
|
||||||
self.root = succesor
|
self.root = successor
|
||||||
elif isLeft:
|
elif isLeft:
|
||||||
parent.leftChild = succesor
|
parent.leftChild = successor
|
||||||
else:
|
else:
|
||||||
parent.rightChild = succesor
|
parent.rightChild = successor
|
||||||
|
|
||||||
succesor.leftChild = current.leftChild
|
successor.leftChild = current.leftChild
|
||||||
|
|
||||||
if succesor is not current.rightChild:
|
if successor is not current.rightChild:
|
||||||
succesorParent.leftChild = succesor.rightChild
|
successorParent.leftChild = successor.rightChild
|
||||||
succesor.rightChild = current.rightChild
|
successor.rightChild = current.rightChild
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
|
@ -63,12 +63,12 @@
|
||||||
"* Here are some basic [instructions](http://www.algolist.net/Data_structures/Binary_search_tree/Removal)\n",
|
"* Here are some basic [instructions](http://www.algolist.net/Data_structures/Binary_search_tree/Removal)\n",
|
||||||
"* If the value to delete isn't on the tree return False\n",
|
"* If the value to delete isn't on the tree return False\n",
|
||||||
"\n",
|
"\n",
|
||||||
"### Traverals \n",
|
"### Traversals \n",
|
||||||
"\n",
|
"\n",
|
||||||
"* In order traversal - left, center, right\n",
|
"* In order traversal - left, center, right\n",
|
||||||
"* Pre order traversal - center, left, right\n",
|
"* Pre order traversal - center, left, right\n",
|
||||||
"* Post order traversal - left, right, center\n",
|
"* Post order traversal - left, right, center\n",
|
||||||
"* Return list for all traverals \n",
|
"* Return list for all traversals \n",
|
||||||
"\n",
|
"\n",
|
||||||
"### Max & Min\n",
|
"### Max & Min\n",
|
||||||
"* Find the max node in the binary search tree\n",
|
"* Find the max node in the binary search tree\n",
|
||||||
|
|
|
@ -64,12 +64,12 @@
|
||||||
"* If the value to delete isn't on the tree return False\n",
|
"* If the value to delete isn't on the tree return False\n",
|
||||||
"\n",
|
"\n",
|
||||||
"\n",
|
"\n",
|
||||||
"### Traverals \n",
|
"### Traversals \n",
|
||||||
"\n",
|
"\n",
|
||||||
"* In order traversal - left, center, right\n",
|
"* In order traversal - left, center, right\n",
|
||||||
"* Pre order traversal - center, left, right\n",
|
"* Pre order traversal - center, left, right\n",
|
||||||
"* Post order traversal - left, right, center\n",
|
"* Post order traversal - left, right, center\n",
|
||||||
"* Return list for all traverals \n",
|
"* Return list for all traversals \n",
|
||||||
"\n",
|
"\n",
|
||||||
"### Max & Min\n",
|
"### Max & Min\n",
|
||||||
"* Find the max node in the binary search tree\n",
|
"* Find the max node in the binary search tree\n",
|
||||||
|
@ -152,7 +152,7 @@
|
||||||
" * If node is left child\n",
|
" * If node is left child\n",
|
||||||
" * Find the biggest value in all the node's children and replace it with it\n",
|
" * Find the biggest value in all the node's children and replace it with it\n",
|
||||||
" * If node is right child\n",
|
" * If node is right child\n",
|
||||||
" * Find the smalles value in all the node's children and replace it with it\n",
|
" * Find the smallest value in all the node's children and replace it with it\n",
|
||||||
"\n",
|
"\n",
|
||||||
"\n",
|
"\n",
|
||||||
"* Time complexity: O(log(n))\n",
|
"* Time complexity: O(log(n))\n",
|
||||||
|
@ -261,25 +261,25 @@
|
||||||
"\t\t\t\tparent.rightChild = current.rightChild\n",
|
"\t\t\t\tparent.rightChild = current.rightChild\n",
|
||||||
"\n",
|
"\n",
|
||||||
"\t\telse:\n",
|
"\t\telse:\n",
|
||||||
"\t\t\tsuccesor = current.rightChild\n",
|
"\t\t\tsuccessor = current.rightChild\n",
|
||||||
"\t\t\tsuccesorParent = current\n",
|
"\t\t\tsuccessorParent = current\n",
|
||||||
"\n",
|
"\n",
|
||||||
"\t\t\twhile succesor.leftChild is not None:\n",
|
"\t\t\twhile successor.leftChild is not None:\n",
|
||||||
"\t\t\t\tsuccesorParent = succesor\n",
|
"\t\t\t\tsuccessorParent = successor\n",
|
||||||
"\t\t\t\tsuccesor = succesor.leftChild\n",
|
"\t\t\t\tsuccessor = successor.leftChild\n",
|
||||||
"\n",
|
"\n",
|
||||||
"\t\t\tif current is self.root:\n",
|
"\t\t\tif current is self.root:\n",
|
||||||
"\t\t\t\tself.root = succesor\n",
|
"\t\t\t\tself.root = successor\n",
|
||||||
"\t\t\telif isLeft:\n",
|
"\t\t\telif isLeft:\n",
|
||||||
"\t\t\t\tparent.leftChild = succesor\n",
|
"\t\t\t\tparent.leftChild = successor\n",
|
||||||
"\t\t\telse:\n",
|
"\t\t\telse:\n",
|
||||||
"\t\t\t\tparent.rightChild = succesor\n",
|
"\t\t\t\tparent.rightChild = successor\n",
|
||||||
"\n",
|
"\n",
|
||||||
"\t\t\tsuccesor.leftChild = current.leftChild\n",
|
"\t\t\tsuccessor.leftChild = current.leftChild\n",
|
||||||
"\n",
|
"\n",
|
||||||
"\t\t\tif succesor is not current.rightChild:\n",
|
"\t\t\tif successor is not current.rightChild:\n",
|
||||||
"\t\t\t\tsuccesorParent.leftChild = succesor.rightChild\n",
|
"\t\t\t\tsuccessorParent.leftChild = successor.rightChild\n",
|
||||||
"\t\t\t\tsuccesor.rightChild = current.rightChild\n",
|
"\t\t\t\tsuccessor.rightChild = current.rightChild\n",
|
||||||
"\n",
|
"\n",
|
||||||
"\t\treturn True \n",
|
"\t\treturn True \n",
|
||||||
"\n",
|
"\n",
|
||||||
|
|
|
@ -59,7 +59,7 @@
|
||||||
"source": [
|
"source": [
|
||||||
"## Algorithm: Modified Selection Sort\n",
|
"## Algorithm: Modified Selection Sort\n",
|
||||||
"\n",
|
"\n",
|
||||||
"* Save the relative position of the first-occurence of each item in a list.\n",
|
"* Save the relative position of the first-occurrence of each item in a list.\n",
|
||||||
"* Iterate through list of unique items.\n",
|
"* Iterate through list of unique items.\n",
|
||||||
" * Keep an outer index; scan rest of list, swapping matching items with outer index and incrementing outer index each time. \n",
|
" * Keep an outer index; scan rest of list, swapping matching items with outer index and incrementing outer index each time. \n",
|
||||||
" \n",
|
" \n",
|
||||||
|
|
Loading…
Reference in New Issue
Block a user