Day22 | 235. 二叉搜索树的最近公共祖先、701. 二叉搜索树中的插入操作、450. 删除二叉搜索树中的节点

235.二叉搜索树的最近公共祖先

本题我用的普通二叉树的最近公共祖先求法,二叉搜索树的专用求法先挖个坑后面再看卡哥视频补

701.二叉搜索树中的插入操作

用中序遍历比较树中结点与待插入结点的值大小,如果当前结点大于待插入结点则向左子树递归,否则向右子树递归,当处理到叶子结点时才执行插入操作

class Solution {
public://中序
    void traversal(TreeNode*root,int val){
        if(root== nullptr)return;
        if(root->val>val)
            insertIntoBST(root->left,val);
        if(root->left== nullptr&&root->val>val){
            TreeNode*tmp=new TreeNode(val);
            root->left=tmp;
        }
        if(root->right== nullptr&&root->val<val){
            TreeNode*tmp=new TreeNode(val);
            root->right=tmp;
        }
        if(root->val<val)
            insertIntoBST(root->right,val);
    }
    TreeNode* insertIntoBST(TreeNode* root, int val) {
        if(root== nullptr){
            root=new TreeNode(val);
        }
        traversal(root,val);
        return root;
    }
};

450.删除二叉搜索树中的节点

删除结点需要考虑多种情况

  • 删除结点是叶子结点:直接删
  • 删除结点的左子树为空:用右子树代替它
  • 删除结点的右子树为空:用左子树代替它
  • 删除结点的左右子树都不为空:调整删除后树的结构,将结点的左子树挂载到右子树的最左边
  • 没找到要删除的结点:返回

对于左右子树都不为空的情况,可以用右子树代替被删除结点的位置,由于还需要保证该树为二叉搜索树所以将左子树挂载到右子树的最左边,如下图所示
在这里插入图片描述
请添加图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值