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

【代码随想录day 19】 力扣 450.删除二叉搜索树中的节点

视频讲解:https://www.bilibili.com/video/BV1tP41177us/?share_source=copy_web&vd_source=a935eaede74a204ec74fd041b917810c
文档讲解:https://programmercarl.com/0450.%E5%88%A0%E9%99%A4%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E4%B8%AD%E7%9A%84%E8%8A%82%E7%82%B9.html#%E6%80%9D%E8%B7%AF
力扣题目:https://leetcode.cn/problems/delete-node-in-a-bst/

这道题主要是要分清楚删除的节点有几种情况

  1. 找不到删除的点
  2. 找到了节点,左空右空,即删除的是叶子节点,这种最简单直接删除就好了
  3. 左不空右空,直接将父节点跳过连到左子树就行
  4. 左空又不空,同上镰刀右子树
  5. 左不空又不空,这种是最难的,根据二叉搜索树的特性我们可以将目标节点的左子树全部移到右子树的最左叶子节点。
    这就是这道题的整体思路。
    仍需要注意的是节点的释放,需要保存节点,在删除root节点,否则会出现对空指针的操作。
class Solution {
public:TreeNode* deleteNode(TreeNode* root, int key) {//终止条件//1.没找到删除节点if(root == NULL) return NULL;//2.找到了if(root->val == key){   //删除的是叶子节点if(root->left == NULL && root->right == NULL){delete root;return NULL;}//3.左不空右空else if(root->left != NULL && root->right == NULL ){auto retNode = root->left;delete root;return retNode;}//4.左空右不空else if( root->left == NULL&& root->right != NULL){auto retNode = root->right;delete root;return retNode;}//5.左不空又不空,把节点的左子树放在右子树的左叶子节点后else{TreeNode *cur = root->right;while(cur->left!=NULL){cur = cur->left;}//把左子树放在右子树的左叶子节点后cur->left = root->left;TreeNode* tmp = root;root = root->right;delete tmp;//不要左子树,直接返回右子树return root;}}//单层递归if(key < root->val) root->left = deleteNode(root->left, key);if(key > root->val) root->right = deleteNode(root->right, key);return root;}
};
http://www.xdnf.cn/news/1294759.html

相关文章:

  • PyTorch简介
  • electron进程间通信- 从渲染进程到主进程
  • [量化交易](1获取加密货币的交易数据)
  • 从0开始跟小甲鱼C语言视频使用linux一步步学习C语言(持续更新)8.13
  • C#自定义日期时间选择器
  • C++中的`auto`与`std::any`:功能、区别与选择建议
  • ResourcelessTransactionManager的作用
  • 嵌入式第二十七天(UI相关技术(framebuffer))
  • 深度学习·ExCEL
  • 基于js和html的点名应用
  • Jenkins一直无法启动,怎么办?
  • C# 反射入门:如何获取 Type 对象?
  • Android平台RTSP播放器选型指南:从开源方案到跨平台低延迟专业SDK
  • 浅层神经网络
  • Mysql——如何做到Redolog崩溃后恢复的
  • 完整源码+技术文档!基于Hadoop+Spark的鲍鱼生理特征大数据分析系统免费分享
  • Linux 软件编程:文件IO、目录IO、时间函数
  • VUE基础笔记
  • JS的学习5
  • 更改webpack默认配置项
  • 单片机启动流程详细介绍
  • 高防CDN和高防IP的各自优势
  • RabbitMQ:Windows版本安装部署
  • STM32H743开发周记问题汇总(串口通讯集中)
  • golang语言和JAVA对比
  • 一条n8n工作流
  • SVN提交服务器拒绝访问的问题
  • Linux 桌面到工作站的“性能炼金术”——开发者效率的 6 个隐形瓶颈与破解方案
  • 服务器硬件电路设计之 I2C 问答(五):I2C 总线数据传输方向如何确定、信号线上的串联电阻有什么作用?
  • 【MCP开发】Nodejs+Typescript+pnpm+Studio搭建Mcp服务