前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >力扣 每日一题 删除二叉搜索树中的节点(中等题)

力扣 每日一题 删除二叉搜索树中的节点(中等题)

作者头像
lomtom
发布于 2021-10-27 07:18:14
发布于 2021-10-27 07:18:14
42000
代码可运行
举报
文章被收录于专栏:博思奥园博思奥园
运行总次数:0
代码可运行

一、题目描述:

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

一般来说,删除节点可分为两个步骤:

首先找到需要删除的节点;如果找到了,删除它。说明:要求算法时间复杂度为 O(h),h 为树的高度。

示例:

root = [5,3,6,2,4,null,7] key = 3

给定需要删除的节点值是 3,所以我们首先找到 3 这个节点,然后删除它。 一个正确的答案是 [5,4,6,2,null,null,7], 如下图所示。

另一个正确答案是 [5,2,6,null,4,null,7]。

二、解答

分析

解题思路:首先,这个题目可以根据删除的节点的左右节点来判断。

而找到该节点是非常简单的,因为这棵树是二叉搜索树,而二叉搜索树的特性,左节点的值一定小于该节点值,右节点的值一定大于该节点的值,所以直接搜索就可以找到该值。

所以重点在于怎么判断该节点的左右节点的情况。

大致可以分为四种:

1.该节点没有左节点,也没有右节点2.该节点没有左节点,但有右节点3.该节点有左节点,但没有右节点4.该节点有左节点,也有右节点

第一种:对于第一种情况,直接将该节点删除即可。第二种:对于第二种情况,直接删除节点,将左节点代替该节点。第三种:对于第三种情况:直接删除节点,将右节点代替该节点。第四种:对于第四种情况,又可以分为三种情况:

1.该节点的左节点没有右节点,将左节点代替该节点。2.该节点的右节点没有左节点,将右节点代替该节点。3.对于都有的情况,为了保证二叉搜索树的结构,我们 ① :可以用该节点的左节点最右节点的值代替该节点;②:也可以用该节点的右节点的最左节点的值代替该节点。

而对于最后的情况,也就是第四种情况的第三种情况, 需要注意 ①中,如果最右节点还有左节点,我们可以用最右节点的左节点的值代替最右节点所在的位置; ②中,如果最左节点还有右节点,我们可以用最左节点的右节点的值代替最左节点所在的位置。

再一次总结归纳:

其实,最后第四种情况的第三种就包括了前面所有的方面,

在找到该节点后:

1.如果该节点的左节点不为空,我们用该节点的左节点最右节点的值代替该节点;2.否则,如果该节点的右节点不为空,我们可以用该节点的右节点的最左节点的值代替该节点。3.否则,将该节点置空。

找到该节点,非常容易,因为左节点的值一定小于该节点值,右节点的值一定大于该节点的值。

所以,从根节点开始遍历

1.如果遍历到的节点的值大于该值,该值一定处于该节点的右子树,往右遍历即可。2.否则,如果遍历到的节点的值小于该值,该值一定处于该节点的左子树,往左遍历即可。3.否则,就是找到了该值,在进行上述操作即可。

时间复杂度:O(h),其中 n 为树的高度。

代码

代码语言:javascript
代码运行次数:0
运行
复制

执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户 内存消耗:39.2 MB, 在所有 Java 提交中击败了8.92%的用户

三、官方解答

代码语言:javascript
代码运行次数:0
运行
复制

参考:1、题目[1] 2、官方解答[2]

本文首发于CSDN,作者:lomtom 原文链接:https://blog.csdn.net/qq_41929184/article/details/112662236 你的支持就是我最大的动力。

References

[1] 题目: https://leetcode-cn.com/problems/delete-node-in-a-bst/ [2] 官方解答: https://leetcode-cn.com/problems/delete-node-in-a-bst/solution/shan-chu-er-cha-sou-suo-shu-zhong-de-jie-dian-by-l/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 博思奥园 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二、解答
    • 分析
    • 代码
  • 三、官方解答
    • References
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档