      "\n",
      "### Insert\n",
      "\n",
      "* If the data is <= the current node's data\n",
      "    * If the current node's left child is None, set it to Node(data)\n",
      "    * Else, recursively call insert on the left child\n",
      "* Else\n",
      "    * If the current node's right child is None, set it to Node(data)\n",
 
</s> remove     "* Time: O(log n)\n",
    "* Space: O(1)"
 </s> add     "* Time: O(h), where h is the height of the tree\n",
    "    * In a balanced tree, the height is O(nlogn)\n",
    "    * In the worst case we have a linked list structure with O(n)\n",
    "* Space: O(m), where m is the recursion depth, or O(1) if using an iterative approach" </s> remove     "* 1, 2, 3, 4, 5 -> 1, 2, 3, 4, 5"
 </s> add     "* 1, 2, 3, 4, 5 -> 1, 2, 3, 4, 5\n",
    "\n",
    "If the `root` input is `None`, return a tree with the only element being the new root node." </s> remove     "* 1, 2, 3, 4, 5 -> 1, 2, 3, 4, 5"
 </s> add     "* 1, 2, 3, 4, 5 -> 1, 2, 3, 4, 5\n",
    "\n",
    "If the `root` input is `None`, return a tree with the only element being the new root node." </s> remove     "        node = Node(1)\n",
 </s> add     "        node = insert(None, 1)\n",
    "* If the root is None, return Node(data)\n",
      "\n",
      "### Insert\n",
      "\n",
    "* If the root is None, return Node(data)\n",
      "* If the data is <= the current node's data\n",
      "    * If the current node's left child is None, set it to Node(data)\n",
      "    * Else, recursively call insert on the left child\n",
      "* Else\n",
      "    * If the current node's right child is None, set it to Node(data)\n",
keep keep add keep keep keep keep keep
 Polish bst challenge and solution

Add root is None input test case.  Update time and space complexity discussion. 
graphs_trees/bst/bst_solution.ipynb