classSolution { public: TreeNode* insertIntoBST(TreeNode* root, int val){ if (!root) { TreeNode *node = newTreeNode(val); return node; } TreeNode *pre = NULL, *cur = root; while (cur) { // 找合适的空位 pre = cur; // 标记上一个节点 if (cur -> val > val) cur = cur -> left; else cur = cur -> right; } if (pre) { // 生成节点并插入到pre的左孩子或者右孩子位置 if (pre -> val > val) pre -> left = newTreeNode(val); else pre -> right = newTreeNode(val); } return root; } };
classSolution { private: TreeNode* deleteTheNode(TreeNode* target){ if (!target) returnnullptr; if (!(target -> right)) return target -> left; auto cur = target -> right; while (cur -> left) { cur = cur -> left; } cur -> left = target -> left; return target -> right; } public: TreeNode* deleteNode(TreeNode* root, int key){ if (!root) returnnullptr; auto cur = root; TreeNode *pre = nullptr; while (cur) { if (cur -> val == key) break; pre = cur; if (cur -> val > key) cur = cur = cur -> left; else cur = cur -> right; } if (!pre && root -> val == key) returndeleteTheNode(root); if (pre -> left && pre -> left -> val == key) pre -> left = deleteTheNode(cur); if (pre -> right && pre -> right -> val == key) pre -> right = deleteTheNode(cur); return root; } };