目录
[235. 二叉搜索树的最近公共祖先](#235. 二叉搜索树的最近公共祖先)
[701. 二叉搜索树中的插入操作](#701. 二叉搜索树中的插入操作)
[450. 删除二叉搜索树中的节点](#450. 删除二叉搜索树中的节点)
235. 二叉搜索树的最近公共祖先
cpp
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if (p->val < root->val && q->val < root->val)
return lowestCommonAncestor(root->left, p, q);
if (p->val > root->val && q->val > root->val)
return lowestCommonAncestor(root->right, p, q);
return root;
}
};
701. 二叉搜索树中的插入操作
cpp
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
TreeNode* insertIntoBST(TreeNode* root, int val) {
if(!root)return new TreeNode(val);
if(val<root->val)root->left=insertIntoBST(root->left,val);
else root->right=insertIntoBST(root->right,val);
return root;
}
};
450. 删除二叉搜索树中的节点
cpp
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
TreeNode* deleteNode(TreeNode* root, int key) {
if(!root)return nullptr;
if(key>root->val)root->right=deleteNode(root->right,key);
else if(key<root->val) root->left=deleteNode(root->left,key);
else{
if(!root->left)return root->right;
else if(!root->right)return root->left;
TreeNode* node=root->right;
while(node->left)node=node->left;
node->left=root->left;
root=root->right;
}
return root;
}
};
