leetcode450. 删除二叉搜索树中的节点(详解)
一:题目
二:上码
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. 删除二叉搜索树中的节点(详解)相关推荐
- Leetcode--450. 删除二叉搜索树中的节点
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变.返回二叉搜索树(有可能被更新)的根节点的引用. 一般来说,删除节点可分为两个 ...
- LeetCode450题—— 删除二叉搜索树中的节点
首先需要认识什么是二叉搜索树,可以进入百度词条https://baike.baidu.com/item/%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91/70 ...
- LeetCode刷题实战450:删除二叉搜索树中的节点
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...
- 代码随想录算法训练营第22天 二叉树 java :235. 二叉树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点
文章目录 LeetCode 236. 二叉树的最近公共祖先 题目讲解 思路 LeetCode 701.二叉搜索树中的插入操作 题目讲解 思路 LeetCode 450.删除二叉搜索树中的节点 题目讲解 ...
- 二叉树part8 | ● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点
文章目录 235. 二叉搜索树的最近公共祖先 思路 代码 困难 701.二叉搜索树中的插入操作 思路 代码 450.删除二叉搜索树中的节点 思路 代码 困难 今日收获 235. 二叉搜索树的最近公共祖 ...
- leetcode 450. 删除二叉搜索树中的节点 c语言实现
如题: 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变.返回二叉搜索树(有可能被更新)的根节点的引用. 一般来说,删除节点可 ...
- 67. Leetcode 450. 删除二叉搜索树中的节点 (二叉搜索树-基本操作类)
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变.返回二叉搜索树(有可能被更新)的根节点的引用.一般来说,删除节点可分为两个步 ...
- 450. 删除二叉搜索树中的节点
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变.返回二叉搜索树(有可能被更新)的根节点的引用. 一般来说,删除节点可分为两个 ...
- 【数据结构与算法】之深入解析“删除二叉搜索树中的节点”的求解思路与算法示例
一.题目要求 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变,返回二叉搜索树(有可能被更新)的根节点的引用. 一般来说,删除 ...
最新文章
- git ssh key创建和github使用
- Tomcat Servlet
- ubuntu 14.04设备OVS虚拟OpenFlow交换机配置汇总
- 专业写博一天------ArrayList 线程安全
- 【面试题】Redis中是如何实现分布式锁的
- 野火开发版屏幕_盘一盘那些年我们常用的物联网开发板!
- layUI框架中文件上传前后端交互及遇到的相关问题
- VTK:Filtering之ExtractVisibleCells
- vim学习(2)小幅提升
- SpringBoot 自带工具类~StringUtils
- java写出http数据包_java用jpcap怎么识别出http和https的数据包?
- C# 大数组赋值给小数组,小数组赋值给大数组
- 计算机学院 迎新口号,清华大学迎新标语
- 西电华为交换设备配置(6506)
- Codesys学习调试笔记2
- 爬虫实战之selenium淘宝抢购订单
- Python 简单的爬虫爬取网页框架(爬取网页框架+实例)
- SQLSERVER2012备份日志报错:”读取失败: 23(数据错误(循环冗余检查)。)”
- 向武 清华大学 计算机,双胞胎兄弟向威、向武同时考上清华大学
- 苹果11蓝牙配对不成功怎么办_iphone11蓝牙搜不到设备怎么办
热门文章
- .NET Core dotnet 命令大全
- 第二章 指南(4.3)添加 View
- ArcGIS实验教程——实验五:空间数据编辑
- C语言试题八十一之利用递归函数调用方式,将所输入的5个字符,相反顺序打印
- React Native之react-native bundle --platform android --dev false --entry-file index.js --bundle失败
- Android插件化开发之动态加载技术系列索引
- aop在项目中的实际运用_【消防验收】防火玻璃在实际运用中的四大关键问题
- 软件项目管理课后题下载【共5个章(1、3、4、5、6)】
- 真正的男人要勇于承担责任......
- 要比惨吗?看看这个女人