      "        self.left = None\n",
      "        self.right = None\n",
      "\n",
      "    def __str__(self):\n",
      "        return str(self.data)\n",
      "\n",
 
</s> remove     "            insert(root.left, data)\n",
 </s> add     "            return insert(root.left, data)\n", </s> remove     "            insert(root.right, data)"
 </s> add     "            return insert(root.right, data)"
    "        self.parent = None\n",
      "        self.left = None\n",
      "        self.right = None\n",
    "        self.parent = None\n",
      "\n",
      "    def __str__(self):\n",
      "        return str(self.data)\n",
      "\n",
keep add keep keep keep keep
 Updated bst to keep track of its parent and to return the node it inserts. 
graphs_trees/bst/bst_solution.ipynb