代码随想录算法打卡第十九天, 新手自我记录一下刷题历程, 仅为自我打卡使用.
说实话插入已经觉得够难了, 删除整个给我整蒙了.
class Solution {
public:
TreeNode* traversal(TreeNode* node, TreeNode* p, TreeNode* q) {
if (!node) return nullptr;
if ((node->val <= q->val && node->val >= p->val) || (node->val <= p->val && node->val >= q->val)) {
return node;
}
else if (node->val > q->val && node->val > p->val) {
return traversal(node->left, p, q);
} else {
return traversal(node->right, p ,q);
}
}
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
return traversal(root, p, q);
}
};
class Solution {
public:
TreeNode* insertIntoBST(TreeNode* root, int val) {
if (root == nullptr) {
TreeNode* node = new TreeNode(val);
return node;
}
if (val > root->val) {
root->right = insertIntoBST(root->right, val);
}
if (val < root->val) {
root->left = insertIntoBST(root->left, val);
}
return root;
}
};
class Solution {
public:
TreeNode* deleteNode(TreeNode* root, int key) {
if (root == nullptr)
return nullptr;
if (root->val == key) {
if (root->left == nullptr && root->right == nullptr) {
delete root;
return nullptr;
} else if (root->left != nullptr && root->right == nullptr) {
TreeNode* tmp = root->left;
delete root;
return tmp;
} else if (root->left == nullptr && root->right != nullptr) {
TreeNode* tmp = root->right;
delete root;
return tmp;
} else {
TreeNode* cur = root->right;
while (cur->left != nullptr) {
cur = cur->left;
}
cur->left = root->left;
TreeNode* tmp = root->right;
delete root;
return tmp;
}
}
if (root->val < key)
root->right = deleteNode(root->right, key);
if (root->val > key)
root->left = deleteNode(root->left, key);
return root;
}
};
希望今天能够再刷一天!