LeetCode75| 二叉搜索树

目录

[700 二叉搜索树中的搜索](#700 二叉搜索树中的搜索)

迭代

递归

[450 删除二叉搜索树中的节点](#450 删除二叉搜索树中的节点)


700 二叉搜索树中的搜索

注意二叉搜索树的性质即可

迭代

cpp 复制代码
class Solution {
public:
    TreeNode* searchBST(TreeNode* root, int val) {
        while(root != NULL){
            if(root->val < val)root = root->right;
            else if(root->val > val)root = root->left;
            else return root;
        }
        return NULL;
    }
};

时间复杂度O(n)

空间复杂度O(n)

递归

cpp 复制代码
class Solution {
public:
    TreeNode* searchBST(TreeNode* root, int val) {
        if(root == NULL)return NULL;
        if(root->val == val)return root;
        return root->val > val?searchBST(root->left,val) : searchBST(root->right,val); 
    }
};

时间复杂度O(n)

空间复杂度O(1)

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

在删除待删除节点时有如下五种情况

  1. 没找到待删除节点,遍历到空节点后返回
  2. 待删除节点左右节点都为空,删除后直接返回空
  3. 待删除节点左节点为空,右节点不为空,删除节点后让右孩子作为根节点
  4. 待删除节点右节点为空,左节点不为空,删除节点后让左孩子作为根节点
  5. 待删除节点左右节点都不为空,将待删除节点的左孩子放到右孩子的最左节点的左孩子处,返回待删除节点的右孩子作为根节点
cpp 复制代码
class Solution {
public:
    TreeNode* deleteNode(TreeNode* root, int key) {
        if(root == NULL)return NULL;//情况一
        if(root->val == key){
            if(root->left == NULL && root->right == NULL)return NULL;//情况二
            else if(root->left == NULL && root->right != NULL)return root->right;//情况三
            else if(root->left != NULL && root->right == NULL)return root->left;//情况四
            else{//情况五
                TreeNode* cur = root->right;
                while(cur->left != NULL){
                    cur = cur->left;
                }
                cur->left = root->left;
                return root->right;
            }
        }
        if(root->val > key)root->left = deleteNode(root->left,key);
        if(root->val < key)root->right = deleteNode(root->right,key);
        return root;
    }
};

时间复杂度O(n)

空间复杂度O(n)

相关推荐
Coovally AI模型快速验证26 分钟前
MMYOLO:打破单一模式限制,多模态目标检测的革命性突破!
人工智能·算法·yolo·目标检测·机器学习·计算机视觉·目标跟踪
可为测控1 小时前
图像处理基础(4):高斯滤波器详解
人工智能·算法·计算机视觉
Milk夜雨1 小时前
头歌实训作业 算法设计与分析-贪心算法(第3关:活动安排问题)
算法·贪心算法
BoBoo文睡不醒2 小时前
动态规划(DP)(细致讲解+例题分析)
算法·动态规划
apz_end2 小时前
埃氏算法C++实现: 快速输出质数( 素数 )
开发语言·c++·算法·埃氏算法
仟濹3 小时前
【贪心算法】洛谷P1106 - 删数问题
c语言·c++·算法·贪心算法
CM莫问4 小时前
python实战(十五)——中文手写体数字图像CNN分类
人工智能·python·深度学习·算法·cnn·图像分类·手写体识别
sz66cm4 小时前
LeetCode刷题 -- 45.跳跃游戏 II
算法·leetcode
Amor风信子4 小时前
华为OD机试真题---战场索敌
java·开发语言·算法·华为od·华为
old_power5 小时前
【PCL】Segmentation 模块—— 基于图割算法的点云分割(Min-Cut Based Segmentation)
c++·算法·计算机视觉·3d