一:题目


二:上码

1.确定递归函数和参数
TreeNode* deleteNode(TreeNode* root, int key)
这里的返回参数 我们也用一个指针接住,反正我们最终是返回的整棵树(如果没找到那就是空)
2.确定递归函数的终止条件
if(root == NULL) return root;
3.确定递归函数递归体
如果找到了目标值key
(1):(如果root左右孩子都为空的话,直接删除)返回NULL的根节点.(层层往上返回,最终
返回到根节点)
(2):(如果root左孩子不空,右孩子为空的话) 直接删除结点 (root) 左孩子补位
(3):(如果root右孩子不空,左孩子为空的话) 直接删除结点 右孩子补位
(4):(如果root左右孩子不空的话) 这时候先找到root右子树最左边的结点 将root左子树补位到这
然后用右子树来代替root

//这里的if判断 是充分利用二叉搜索树的特性,我们将递归的结果用root->left…接住
//是为了可以层层往上返,最终可以返回到root
if(root->val > key) root->left = deleteNode(root->left, int key)
if(root->val < key) root->right = deleteNode(root->right, int key)

三:上码

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {public:/**思路:递归三部曲1.确定递归函数和参数TreeNode* deleteNode(TreeNode* root, int key)这里的返回参数 我们也用一个指针接住,反正我们最终是返回的整棵树(如果没找到那就是空)2.确定递归函数的终止条件if(root == NULL) return root;3.确定递归函数递归体如果找到了目标值key(1):(如果root左右孩子都为空的话,直接删除)返回NULL的根节点.(层层往上返回,最终返回到根节点)(2):(如果root左孩子不空,右孩子为空的话) 直接删除结点 (root) 左孩子补位(3):(如果root右孩子不空,左孩子为空的话) 直接删除结点 右孩子补位(4):(如果root左右孩子不空的话) 这时候先找到root右子树最左边的结点  将root左子树补位到这然后用右子树来代替root//这里的if判断 是充分利用二叉搜索树的特性,我们将递归的结果用root->left....接住//是为了可以层层往上返,最终可以返回到rootif(root->val > key)  root->left = deleteNode(root->left, int key)if(root->val < key)  root->right = deleteNode(root->right, int key)*/TreeNode* deleteNode(TreeNode* root, int key) {if(root == NULL) return root;//未找到if(root->val == key) {    if(root->left == NULL && root->right == NULL){//要删除的结点为根节点 则直接删除 root = NULL;                             //返回NULLreturn root;                               }else if(root->left == NULL && root->right != NULL) {root = root->right;return root;}else if(root->right == NULL && root->left != NULL) {root = root->left;return root;}else {//左右子树都不为空的情况TreeNode* cur = root->right;//找到右子树的最左边的结点while(cur->left != NULL) {cur = cur->left;} cur->left = root->left;//将root->left接到右子树最左边的结点上               root = root->right;return root;}}if(root->val > key) root->left = deleteNode(root->left,key);if(root->val < key) root->right = deleteNode(root->right,key);return root;}
};


快过年了 加油共勉陌生人 虽然不知道未来会怎样 自己到底行不行 自己会不会是陪跑者 可有些东西只有拼命去做了 才会不后悔 也就是试错 我还年轻 我可以吃苦 加油 陌生人!!!!!!!!!

leetcode450. 删除二叉搜索树中的节点(详解)相关推荐

  1. Leetcode--450. 删除二叉搜索树中的节点

    给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变.返回二叉搜索树(有可能被更新)的根节点的引用. 一般来说,删除节点可分为两个 ...

  2. LeetCode450题—— 删除二叉搜索树中的节点

    首先需要认识什么是二叉搜索树,可以进入百度词条https://baike.baidu.com/item/%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91/70 ...

  3. ​LeetCode刷题实战450:删除二叉搜索树中的节点

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  4. 代码随想录算法训练营第22天 二叉树 java :235. 二叉树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

    文章目录 LeetCode 236. 二叉树的最近公共祖先 题目讲解 思路 LeetCode 701.二叉搜索树中的插入操作 题目讲解 思路 LeetCode 450.删除二叉搜索树中的节点 题目讲解 ...

  5. 二叉树part8 | ● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点

    文章目录 235. 二叉搜索树的最近公共祖先 思路 代码 困难 701.二叉搜索树中的插入操作 思路 代码 450.删除二叉搜索树中的节点 思路 代码 困难 今日收获 235. 二叉搜索树的最近公共祖 ...

  6. leetcode 450. 删除二叉搜索树中的节点 c语言实现

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

  7. 67. Leetcode 450. 删除二叉搜索树中的节点 (二叉搜索树-基本操作类)

    给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变.返回二叉搜索树(有可能被更新)的根节点的引用.一般来说,删除节点可分为两个步 ...

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

    给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变.返回二叉搜索树(有可能被更新)的根节点的引用. 一般来说,删除节点可分为两个 ...

  9. 【数据结构与算法】之深入解析“删除二叉搜索树中的节点”的求解思路与算法示例

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

最新文章

  1. git ssh key创建和github使用
  2. Tomcat Servlet
  3. ubuntu 14.04设备OVS虚拟OpenFlow交换机配置汇总
  4. 专业写博一天------ArrayList 线程安全
  5. 【面试题】Redis中是如何实现分布式锁的
  6. 野火开发版屏幕_盘一盘那些年我们常用的物联网开发板!
  7. layUI框架中文件上传前后端交互及遇到的相关问题
  8. VTK:Filtering之ExtractVisibleCells
  9. vim学习(2)小幅提升
  10. SpringBoot 自带工具类~StringUtils
  11. java写出http数据包_java用jpcap怎么识别出http和https的数据包?
  12. C# 大数组赋值给小数组,小数组赋值给大数组
  13. 计算机学院 迎新口号,清华大学迎新标语
  14. 西电华为交换设备配置(6506)
  15. Codesys学习调试笔记2
  16. 爬虫实战之selenium淘宝抢购订单
  17. Python 简单的爬虫爬取网页框架(爬取网页框架+实例)
  18. SQLSERVER2012备份日志报错:”读取失败: 23(数据错误(循环冗余检查)。)”
  19. 向武 清华大学 计算机,双胞胎兄弟向威、向武同时考上清华大学
  20. 苹果11蓝牙配对不成功怎么办_iphone11蓝牙搜不到设备怎么办

热门文章

  1. .NET Core dotnet 命令大全
  2. 第二章 指南(4.3)添加 View
  3. ArcGIS实验教程——实验五:空间数据编辑
  4. C语言试题八十一之利用递归函数调用方式,将所输入的5个字符,相反顺序打印
  5. React Native之react-native bundle --platform android --dev false --entry-file index.js --bundle失败
  6. Android插件化开发之动态加载技术系列索引
  7. aop在项目中的实际运用_【消防验收】防火玻璃在实际运用中的四大关键问题
  8. 软件项目管理课后题下载【共5个章(1、3、4、5、6)】
  9. 真正的男人要勇于承担责任......
  10. 要比惨吗?看看这个女人