     "outputs": [],
     "source": [
      "def left_most_node(node):\n",
      "    if node is None:\n",
      "        return\n",
      "    if node.left is None:\n",
      "        return node.data\n",
      "    return left_most_node(node.left)\n",
      "\n",
      "\n",
 
</s> remove     "        return\n",
 </s> add     "        raise Exception('Invalid input node')\n", </s> remove     "            return\n",
 </s> add     "            # We reached the root, the original input node\n",
    "            # must be the largest element in the tree.\n",
    "            return None\n",
    "        return None\n",
     "outputs": [],
     "source": [
      "def left_most_node(node):\n",
      "    if node is None:\n",
    "        return None\n",
      "    if node.left is None:\n",
      "        return node.data\n",
      "    return left_most_node(node.left)\n",
      "\n",
      "\n",
keep keep keep keep replace 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