      "        if root.left is None:\n",
      "            root.left = Node(data)\n",
      "        else:\n",
      "            return insert(root.left, data)\n",
      "    else:\n",
      "        if root.right is None:\n",
      "            root.right = Node(data)\n",
      "            root.right.parent = root\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)" </s> remove             insert(root.left, data)
 </s> add             return insert(root.left, data)
    "            root.left.parent = root\n",
    "            return root.left\n",
      "        if root.left is None:\n",
      "            root.left = Node(data)\n",
    "            root.left.parent = root\n",
    "            return root.left\n",
      "        else:\n",
      "            return insert(root.left, data)\n",
      "    else:\n",
      "        if root.right is None:\n",
      "            root.right = Node(data)\n",
      "            root.right.parent = root\n",
keep add keep keep 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