递归
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if (!root) {
return root;
}
if (root->val < p->val && root->val < q->val) {
return lowestCommonAncestor(root->right, p, q);
}
if (root->val > p->val && root->val > q->val) {
return lowestCommonAncestor(root->left, p, q);
}
return root;
}
};
迭代
*/
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if (!root) {
return root;
}
while (root) {
if (root->val < p->val && root->val < q->val) {
root = root->right;
}else if(root->val > p->val && root->val > q->val) {
root = root->left;
}else {
break;
}
}
return root;
}
};
迭代
class Solution {
public:
TreeNode* insertIntoBST(TreeNode* root, int val) {
if (!root) {
return new TreeNode(val);
}
TreeNode* cur = root;
while(cur) {
if (cur->val < val) {
if (!cur->right) {
cur->right = new TreeNode(val);
break;
}else {
cur = cur->right;
}
}else {
if (!cur->left) {
cur->left = new TreeNode(val);
break;
}else {
cur = cur->left;
}
}
}
return root;
}
};
递归
class Solution {
public:
TreeNode* insertIntoBST(TreeNode* root, int val) {
if (!root) {
return new TreeNode(val);
}
if (root->val < val) {
root->right = insertIntoBST(root->right, val);
}else {
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 && !root->right) {
delete root;
return nullptr;
}else if (!root->left) {
TreeNode* temp = root->right;
delete root;
return temp;
}else if (!root->right){
TreeNode* temp = root->left;
delete root;
return temp;
}else {
TreeNode* cur = root->right;
while(cur->left){
cur = cur->left;
}
cur->left = root->left;
TreeNode* temp = root;
root = root->right;
delete temp;
return root;
}
}
if (root->val < key) {
root->right = deleteNode(root->right, key);
}
if (root->val > key){
root->left = deleteNode(root->left, key);
}
return root;
}
};