一亩三分地

 找回密码 注册账号

扫描二维码登录本站


北美版丁香园
美国和加拿大
疫情地图实时动态追踪

热门职场讲座
Career in Tech
职场晋升之路

Salarytics=Salary Analytics
查询工资数据
系统自动计算每年收入

科技公司如何
用数据分析驱动产品开发
coupon code 250off 立减$250
游戏初创公司招聘工程师、UIUX Designer和游戏策划
坐标湾区
DreamCraft创始团队
招聘游戏开发工程师
查看: 735|回复: 9
收起左侧

[树/链表/图] BST删除节点

[复制链接] |试试Instant~ |树/链表/图, 刷题
我的人缘0

分享帖子到朋友圈
小水 | 显示全部楼层 |阅读模式
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (37)
 
 
0% (0)    👎

请教一个BST删除节点的问题,如上图所示,如果要删除的是根节点5,那么应该找节点4还是节点6作为后继节点successor?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册账号

x

上一篇:2018年从零开始刷到拿到offer现在重新回来刷题
下一篇:做 Machine learning 相关的职位,大家都用什么语言刷题?
我的人缘0
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   95% (562)
 
 
4% (25)    👎
都可以吧...

评分

参与人数 1大米 +1 收起 理由
小水 + 1 很有用的信息!

查看全部评分

回复

使用道具 举报

我的人缘0
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   98% (453)
 
 
1% (6)    👎
同意,都可以

评分

参与人数 1大米 +1 收起 理由
小水 + 1 很有用的信息!

查看全部评分

回复

使用道具 举报

我的人缘0
 楼主| 小水 2020-1-20 07:21:26 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (37)
 
 
0% (0)    👎

谢谢回复,所以删除有两个孩子的节点,只要判断其左子节点的右孩子的值或者其右子节点的左孩子的值就可以了吗?不好意思说的有点绕,想概括个更general一点的方法
回复

使用道具 举报

我的人缘0
 楼主| 小水 2020-1-20 07:23:45 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (37)
 
 
0% (0)    👎

请问,对于这种删除有两个子节点的node,有更general的方法吗?
回复

使用道具 举报

我的人缘0
jliu 2020-1-23 00:15:27 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   95% (107)
 
 
4% (5)    👎
https://leetcode.com/problems/de ... stand-Java-Solution
要删掉target, 找右子树中的最小节点 min,然后互换 target, min,再删掉右子树中的那个 target

评分

参与人数 1大米 +1 收起 理由
小水 + 1 很有用的信息!

查看全部评分

回复

使用道具 举报

我的人缘0
 楼主| 小水 2020-1-23 01:58:42 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (37)
 
 
0% (0)    👎
jliu 发表于 2020-1-23 00:15
https://leetcode.com/problems/delete-node-in-a-bst/discuss/93296/Recursive-Easy-to-Understand-Java-S ...

谢谢回复,从图上来看,是不是也可以找左子树中较大的那个点,然后交换、删除?
回复

使用道具 举报

我的人缘0
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   75% (9)
 
 
25% (3)    👎
都可以的 一个是右子树最小 另一个是左子树最大

评分

参与人数 1大米 +1 收起 理由
小水 + 1 很有用的信息!

查看全部评分

回复

使用道具 举报

我的人缘0
WarriorZ 2020-1-29 02:10:24 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   96% (1410)
 
 
3% (48)    👎
删除BST中的一个node有四种情况:
1. 当前node没有左右子节点,那么删除本节点就好,递归到这一层直接return null。
2. 当前node只有一个左孩子,那么删除本节点,同时把自己的左孩子返回给上一层。
3. 当前节点只有一个右孩子,同上。
4. 当前节点有左右孩子,为了保持bst的性质,需要把当前这个节点的先驱或者后继找出来,和当前节点交换,然后再删除交换后的target,此时树的性质还是不会变。
参考题目 450. Delete Node in a BST
回复

使用道具 举报

我的人缘0
杨幂的老公 2020-1-29 05:14:38 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   41% (37)
 
 
58% (52)    👎
有左用左,无左用右,无右用空。
无所谓的事情, 并不是平衡树。

评分

参与人数 1大米 +1 收起 理由
小水 + 1 很有用的信息!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

隐私提醒:
■为防止被骚扰甚至人肉,不要公开留微信等联系方式,请以论坛私信方式发送。
■特定版块可以超级匿名:https://pay.1point3acres.com/tools/thread
■其他版块匿名方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

手机版|||一亩三分地

GMT+8, 2020-3-31 07:15

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表