      "* If the node has a right subtree, return the left-most node in the right subtree\n",
      "* Else, go up until you find a node that is its parent's left node\n",
      "    * If you get to the root (ie node.parent is None), return None\n",
      "    * Else, return the parent\n",
      "    \n",
      "Complexity:\n",
      "* Time: O(h), where h is the height of the tree\n",
      "* Space: O(h), where h is the recursion depth (tree height), or O(1) if using an iterative approach"
 
</s> remove     "* Time: O(n)\n",
    "* Space: O(h), where h is the height of the tree"
 </s> add     "* Time: O(h), where h is the height of the tree\n",
    "* Space: O(h), where h is the recursion depth (tree height), or O(1) if using an iterative approach"
    "        * The original input node must be the largest in the tree\n",
      "* If the node has a right subtree, return the left-most node in the right subtree\n",
      "* Else, go up until you find a node that is its parent's left node\n",
      "    * If you get to the root (ie node.parent is None), return None\n",
    "        * The original input node must be the largest in the tree\n",
      "    * Else, return the parent\n",
      "    \n",
      "Complexity:\n",
      "* Time: O(h), where h is the height of the tree\n",
      "* Space: O(h), where h is the recursion depth (tree height), or O(1) if using an iterative approach"
keep keep add keep keep keep keep keep
 Polish bst successor challenge and solution (#82)

Update constraints, test cases, tests, algorithm discussion, and code. 
graphs_trees/bst_successor/bst_successor_solution.ipynb