当前位置: 首页 > news >正文

【LeetCode75】第四十二题 删除二叉搜索数中的节点

目录

题目:

示例:

分析:

代码:


题目:

示例:

分析:

题目给我们一棵二叉搜索树,给我们一个目标值,让我们删除节点值等于目标值的节点,并且删除之后需要保持二叉搜索树的定义,也就是任意一个节点的左子树上的所有节点的值都小于该节点的值,右子树上的所有节点的值都大于该节点的值。

删除一个节点我们首先需要先找到这个节点,根据二叉搜索树的定义,我们遍历二叉树,如果当前节点的值大于目标值,那么目标值只能存在与当前节点的左子树,我们就接着向左子树遍历,反之向右子树遍历。

直到我们找到了目标节点,我们需要把它删除,并且还需要保持这是一棵二叉搜索树。我们可以知道目标节点的右子树上任意一个节点的值都比目标节点的左子树上任意一个节点的值更大,所以我们可以把目标节点的右子树接到目标节点的左子树的最大的节点的右子树上,再让目标节点的左子树顶替上原先目标节点的位置,这样就完成了删除目标节点的这样的操作。

我们也可以是让目标节点的右子树顶替上原先目标节点的位置,再在右子树里最小的节点的左子树接上目标节点的左子树,这样也是可以的。都是满足二叉搜索树的定义。

代码:

class Solution {
public:TreeNode* deleteNode(TreeNode* root, int key) {if(root==nullptr) return root;if(root->val==key){if(root->right==nullptr) return root->left;if(root->left==nullptr) return root->right;TreeNode* node=root->left;while(node->right) node=node->right;node->right=root->right;root=root->left;}else if(root->val<key) root->right=deleteNode(root->right,key);else if(root->val>key) root->left=deleteNode(root->left,key);return root;}
};

http://www.lryc.cn/news/149517.html

相关文章:

  • c++:QT day2 信号和槽
  • 16 Linux之JavaEE定制篇-搭建JavaEE环境
  • AI人员打闹监测识别算法
  • 如何使用CRM系统进行精细化管理客户?
  • 20230829工作心得:如何把大List 切割为多个小List?
  • 基于YOLOV8模型的阶梯和工人目标检测系统(PyTorch+Pyside6+YOLOv8模型)
  • Nginx特性应用及载装
  • vue3+ts组件通信
  • 基于卷积优化算法优化的BP神经网络(预测应用) - 附代码
  • 《论文阅读18》JoKDNet
  • buuctf [CISCN 2019 初赛]Love Math
  • GraphQL渗透测试案例及防御办法
  • Hive SQL 优化大全(参数配置、语法优化)
  • go锁-waitgroup
  • 访问0xdddddddd内存地址引发软件崩溃的问题排查
  • Java从入门到精通-流程控制(一)
  • MybatisPlus(2)
  • iOS UITableView上拉加载解决偶然跳动的Bug
  • MySQL 外键使用详解
  • MongoDB实验——在MongoDB集合中查找文档
  • 事务的总结
  • [ROS]yolov5-7.0部署ROS
  • Java抽象方法、抽象类和接口——第七讲
  • kafka集群之kraft模式
  • 虹科案例 | 缆索挖掘机维护—小传感器,大作用!
  • Windows安装FFmpeg说明
  • 电子电路原理题目整理(1)
  • iPhone 15预售:获取关键信息
  • Kind创建本地环境安装Ingress
  • MySQL与Oracle数据库通过系统命令导出导入