当前位置: 首页 > 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.dtcms.com/a/329369.html

相关文章:

  • 从原材料到成品,光模块 PCB 制造工艺全剖析
  • hutool 作为http 客户端工具调用的一点点总结
  • PG靶机 - PayDay
  • pt-online-schema-change 全解析:MySQL 表结构变更的安全之道
  • 编程的几点感悟
  • 【工具】雀语queyu文件批量下载 文档内容复刻导出
  • LeetCode 面试经典 150_数组/字符串_整数转罗马数字(18_12_C++_中等)(模拟)(对各位进行拆解)
  • 地球磁层全球MHD模型中模拟Dst指数的半经验方法
  • 在RHEL 9.X上安装 Docker最新版(28.3.3)
  • 嵌入式|VNC实现开发板远程Debian桌面
  • Spring 源码学习(十)—— DispatcherServlet
  • 专题:2025抖音电商与微短剧行业研究报告|附150+份报告PDF汇总下载
  • 小迪23年-32~40——java简单回顾
  • Hive 创建事务表的方法
  • 机器学习-----DBSCAN算法
  • 进阶向:Python编写自动化邮件发送程序
  • C++多态:理解面向对象的“一个接口,多种实现”
  • [AXI5]AXI协议中awsize和awlen在Vector Atomic地址膨胀中的作用
  • PCIE 配置空间 拓展能力 定义
  • Linux编程 —— framebuffer
  • AJAX学习(2)
  • AI 创作系列(30)海狸 IM:小而全、易二开、快迭代
  • 八爪鱼和影刀的区别和优缺点
  • 【题解】[CQOI2006] 洛谷P4196 凸多边形 /【模板】半平面交
  • AI时代程序员的进化:从代码工人到创意架构师-优雅草卓伊凡引言:AI浪潮下的职业重构
  • Celery在Django中的应用
  • 排序总结---保研机试极限复习
  • 亚马逊聚焦战略2.0:从资源分散到价值聚焦的商业重构逻辑
  • 北京JAVA基础面试30天打卡09
  • Java面试宝典:ZGC