LeetCode450:删除二叉搜索树中的节点

题目描述
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。

一般来说,删除节点可分为两个步骤:

首先找到需要删除的节点;
如果找到了,删除它。

在这里插入图片描述

代码

/*
     1.没找到删除的节点:返回节点
     2.叶子节点:直接删除
     3.左不空右空:直接使用左孩子替换
     4.左空右不空:直接使用右孩子替换
     5.左右都不空:将左孩子放到右孩子的最左侧的节点,然后将右孩子替换要删除的节点
*/
class Solution {
public:
    TreeNode* deleteNode(TreeNode* root, int key) {
        if (root == nullptr) return nullptr;
        if (root->val == key) {
            //叶子节点
            if (root->left == nullptr && root->right == nullptr)
            {
                delete root;
                return nullptr;
            }
            //左不空右空
            else if (root->right == nullptr) {
                TreeNode* retNode = root->left;
                delete root;
                return retNode;
            }
            //左空右不空
            else if (root->left == nullptr) {
                TreeNode* retNode = root->right;
                delete root;
                return retNode;
            }

            //左右都不空
            else if (root->left && root->right) {
                TreeNode* cur = root->right;
                while (cur->left) cur = cur->left;
                cur->left = root->left;
                TreeNode* tmp = root;
                root = root->right;
                delete tmp;
                return root;
            }
        }

        else if (key < root->val) root->left = deleteNode(root->left, key);
        else if (key > root->val) root->right = deleteNode(root->right, key);
        return root;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/554164.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JS-39-underscore01-初识underscore

一、underscore简介 前面我们已经讲过了&#xff0c;JavaScript是函数式编程语言&#xff0c;支持高阶函数和闭包。 函数式编程非常强大&#xff0c;可以写出非常简洁的代码。例如Array的map()和filter()方法&#xff1a; use strict; var a1 [1, 4, 9, 16]; var a2 a1.ma…

代码随想录算法训练营Day1 : 704.二分查找、27.移除元素

二分查找&#xff1a; 题目&#xff1a;给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 题目链接&#xff1a;704.二分…

免费泛域名SSL如何申请,和通配符有什么区别

-----让我们明确什么是泛域名。所谓泛域名&#xff0c;是指使用星号&#xff08;*&#xff09;作为子域名的占位符&#xff0c;它可以匹配任意子域名。-----而通配符在域名中&#xff0c;它可以出现在主域名的任何位置&#xff0c;它可以用于主域名和子域名的保护。 主要应用场…

抖音取图最新玩法!ai头像壁纸轻松玩转取图项目,取图小程序现成模板快速搭建上线运营。

取图这个项目其实非常有趣且易于上手&#xff0c;尤其适合初学者。今天&#xff0c;我将为你详细解析取图小程序的玩法及操作步骤。 一、原理简述 其核心理念在于&#xff0c;当用户欣赏完你在抖音上的作品后&#xff0c;若对其中的图片或表情包产生兴趣&#xff0c;你可以引…

部署wordpress

查看别名type ll ll 是 ls -l --colorauto 的别名 设置别名alias alias ymyum install -y 使用别名ym nginx 取消别名unalias ym 基于LNMP做一个wordpress nginx mysql 5.7 PHP 7.4 1、linux基本环境 修改主机名 hostnamectl set-hostname $name 关闭防火墙及selinux …

2024年【电工(初级)】新版试题及电工(初级)免费试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 电工&#xff08;初级&#xff09;新版试题根据新电工&#xff08;初级&#xff09;考试大纲要求&#xff0c;安全生产模拟考试一点通将电工&#xff08;初级&#xff09;模拟考试试题进行汇编&#xff0c;组成一套电…

C++11新特性之final关键字

final修饰函数 final修饰函数只能修饰虚函数&#xff0c;防止父类的函数被子类重写 final修饰类 final修饰类防止类被继承

达梦数据库导入导出工具dmfldr

达梦数据库导入导出工具dmfldr 基础信息 OS版本&#xff1a; Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本&#xff1a; DM Database Server 64 V8 DB Version: 0x7000c 03134284132-20240115-215128-200811 dmfldr工具介绍 dmfldr&#xff08;DM Fast Loade…

【漏洞复现】浙大恩特客户资源管理系统Ri0004_openFileByStream.jsp接口存在任意文件读取漏洞

漏洞描述 浙大恩特客户资源管理系统是一款针对企业客户资源管理的软件产品。该系统旨在帮助企业高效地管理和利用客户资源,提升销售和市场营销的效果。浙大恩特客户资源管理系统Ri0004_openFileByStream.jsp接口存在任意文件读取漏洞。该漏洞可能会对系统的完整性和安全性产生…

C语言-内存操作函数

C语言有一类内存函数&#xff0c;他们可以以字节为单位进行数据的拷贝、追加&#xff0c;甚至可以替代部分字符串函数。于是让我们来狠狠地学习它一百万遍吧~ 1.memcpy函数的使用和模拟实现 void * memcpy ( void * destination, const void * source, size_t num ); 1.1mem…

Java的数组定义和使用

目录 1.前言 2.数组的概念 3.在Java中的创建和初始化 3.1数组的创建 3.2数组的初始化 4.关于使用 4.1数组元素的访问 4.2数组的遍历 4.3length和length()的区别 5.数组其实是引用类型数据 5.1初始JVM的内存分布 5.2基本类型变量与引用类型变量的区别 5.3关于null的认识 5.4设计…

ssm057学生公寓管理中心系统的设计与实现+jsp

学生公寓管理中心系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本学生公寓管理中心系统就是在这样的大环境下诞生&#xff0c;其可以帮助管…

Matlab对多个输入信号进行数值排序提取特定值

1、将多个信号转为一个数组信号输出&#xff0c;在这里需要注意&#xff0c;数据类型是否统一&#xff1b; 2、使用Sort模块&#xff0c;进行排序&#xff08;可设置排序方向&#xff09;&#xff0c;得到排序后的新数组以及对应的索引号&#xff1b; 3、设置想要的索引号&…

如何使用Postgres的JSONB数据类型进行高效查询

文章目录 解决方案1. 创建包含JSONB列的表2. 插入JSON数据3. 使用GIN索引加速查询4. 执行高效的JSONB查询 示例代码解释 PostgreSQL的JSONB数据类型提供了一种灵活的方式来存储和查询JSON格式的数据。JSONB不仅允许你在PostgreSQL数据库中存储JSON文档&#xff0c;而且还对这些…

文献学习-38-用于增量组织病理学分类的内存高效提示调整

​ Memory-Efficient Prompt Tuning for Incremental Histopathology Classification Authors: Yu Zhu, Kang Li, Lequan Yu, Pheng-Ann Heng Source: The Thirty-Eighth AAAI Conference on Artificial Intelligence (AAAI-24) ​​ Abstract 最近的研究在组织病理学分类方面…

杨元庆:人工智能需要更加私密化和个性化

4月18日&#xff0c; 2024联想创新科技大会Tech World在上海举办。联想集团董事长兼CEO杨元庆在演讲中表示“我们的愿景&#xff0c;就是让人工智能走下云端&#xff0c;真正落地&#xff0c;走进千家万户、千行百业”。 这意味着&#xff0c;我们需要让人工智能更加私密化和个…

低代码开发平台:创新工具,颠覆传统

低代码开发平台是近年来迅速崛起的一种创新型软件开发工具&#xff0c;以其高效、灵活的开发模式正颠覆着传统的开发方式。不再需要编写大量繁杂的代码&#xff0c;开发者们可以在图形化界面中以拖拽、配置的方式进行应用的搭建&#xff0c;大大提高开发效率和质量。本文将全面…

element-plus关于el-radio-group选择一个单选按钮,全被选中

问题 使用el-radio-group 组件&#xff0c;进行多个互斥选择时&#xff0c;点击一个选项时&#xff0c;全部选择。设置radio的默认值也无法选中 代码为官方实例 <template><el-radio-group v-model"radio"><el-radio :value"3">Option…

Games101-光线追踪(辐射度量学、渲染方程与全局光照)

Basic radiometry (辐射度量学) 光的强度假定l为10&#xff0c;但是10是什么。 Whitted-Style中间了很多不同简化&#xff0c;如能看到高光&#xff0c;表示做了布林冯着色&#xff0c;意味着一个光线打进来后会被反射到一定的区域里&#xff0c;而不是沿着完美的镜像方向&…

从三大层次学习企业架构框架TOGAF

目录 前言 掌握TOGAF的三个层次 层次1&#xff1a;怎么学&#xff1f; 层次2&#xff1a;怎么用&#xff1f; 层次3&#xff1a;怎么思&#xff1f; 结束语 前言 对于一名架构师来讲&#xff0c;如果说编程语言是知识库层次中的入门石&#xff0c;那么企业架构框架则相当…