当前位置:网站首页>Leetcode 450. 删除二叉搜索树中的节点
Leetcode 450. 删除二叉搜索树中的节点
2022-08-11 03:29:00 【LuZhouShiLi】
Leetcode 450. 删除二叉搜索树中的节点
题目
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 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:
TreeNode* deleteNode(TreeNode* root, int key) {
if(root == nullptr)
{
return nullptr;
}
if(key > root->val)
{
// 当前节点值小于目标值 在右子树中寻找
root->right = deleteNode(root->right,key);
}
else if(key < root->val)
{
// 当前节点值大于 目标值
root->left= deleteNode(root->left,key);
}
else
{
// 找到目标节点值
if(root->left == nullptr)
{
return root->right;
}
if(root->right == nullptr)
{
return root->left;
}
// 删除的节点 左右子树都存在
// 寻找删除节点右子树中的最左节点
TreeNode* node = root->right;
while(node->left != nullptr)
{
node = node->left;
}
// 将被删除节点的左子树连接到 上述寻找到的最左节点
node->left = root->left;
// 被删除的节点的右子顶替为位置 节点被删除
root = root->right;
}
return root;
}
};
边栏推荐
- 电力机柜数据监测RTU
- App基本框架搭建丨日志管理 - KLog
- 【愚公系列】2022年08月 Go教学课程 035-接口和继承和转换与空接口
- C language recv() function, recvfrom() function, recvmsg() function
- 重庆纸质发票再见!开住宿费电子发票即将全面取代酒店餐饮加油站发票
- DNS separation resolution and intelligent resolution
- The negative semantic transformation layer
- Briefly, talk about the use of @Transactional in the project
- 字体反扒
- pathman_config、pathman_config_params 删除后,如何重建?
猜你喜欢

Redis老了吗?Redis与Dragonfly性能比较

rac备库双节点查询到的表最后更新时间不一致

DOM-DOM tree, a DOM tree has three types of nodes

Build Zabbix Kubernetes cluster monitoring platform

2022-08-10 第六小组 瞒春 学习笔记

音视频开发,为什么要学习FFmpeg?应该怎么入手FFmpeg学习?

Design and Realization of Employment Management System in Colleges and Universities

Kubernetes集群搭建Zabbix监控平台
![[idea error] Invalid target distribution: 17 solution reference](/img/39/cec5d854b1d941e866c7166b75aa22.png)
[idea error] Invalid target distribution: 17 solution reference

The development of the massage chair control panel makes the massage chair simple and intelligent
随机推荐
rac备库双节点查询到的表最后更新时间不一致
云平台下ESB产品开发步骤说明
Add user error useradd: cannot open /etc/passwd
Roewe imax8ev cube battery security, what blackening and swelling are hidden behind it?
Window function application of sum and count
【愚公系列】2022年08月 Go教学课程 036-类型断言
Idea (preferred) cherry-pick operation
常用认证机制
What has programmatic trading changed?
大马驮2石粮食,中马驮1石粮食,两头小马驮一石粮食,要用100匹马,驮100石粮食,如何分配?
Meaning of df and df -lh
How to rebuild after pathman_config and pathman_config_params are deleted?
分布式和集群的区别和联系
Redis老了吗?Redis与Dragonfly性能比较
Qnet Weak Network Test Tool Operation Guide
多商户商城系统功能拆解26讲-平台端分销设置
STC8H development (15): GPIO drive Ci24R1 wireless module
"Beijing-Taiwan high-speed rail" debuted on Baidu map, can it really be built in 2035?
荣威imax8ev魔方电池安全感,背后隐藏着哪些黑化膨胀?
索引的创建、查看、删除