235. 二叉搜索树的最近公共祖先
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if(root->val>p->val&&root->val>q->val)return lowestCommonAncestor(root->left,p,q);
if(root->val<p->val&&root->val<q->val)return lowestCommonAncestor(root->right,p,q);
return root;
}
};
简单
701. 二叉搜索树中的插入操作
class Solution {
public:
TreeNode* insertIntoBST(TreeNode* root, int val) {
if(!root){
TreeNode* newNode=new TreeNode(val);
return newNode;
}
if(val<root->val){
root->left=insertIntoBST(root->left,val);
}
if(val>root->val){
root->right=insertIntoBST(root->right,val);
}
return root;
}
};
直接插在叶子节点后面
450. 删除二叉搜索树中的节点
分五种情况,最后一种最复杂的时候将左子树放在右子树的最左下角,然后返回右子树
class Solution {
public:
TreeNode* deleting(TreeNode* node,int val){
if(node==nullptr)return nullptr;
else if(node->val==val&&!node->left)return node->right;
else if(node->val==val&&!node->right)return node->left;
else if(node->val==val&&node->left&&node->right){
TreeNode* cur=node->left;
TreeNode* index=node->right;
while(index->left){
index=index->left;
}
index->left=cur;
return node->right;}
if(val<node->val)node->left=deleting(node->left,val);
if(val>node->val)node->right=deleting(node->right,val);
return node;
}
TreeNode* deleteNode(TreeNode* root, int key) {
return deleting(root,key);
}
};