老师,请问bst循环删除任意元素如何实现?

老师,请问bst循环删除任意元素如何实现?

循环中如何找到待删除的元素,是根据根节点的值去比较要删除的值是否相等吗?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
liuyubobobo 2020-11-25 20:35:05

对的呀。我们的递归算法也是根据节点的值去比较,和要删除的值相等呀:)


继续加油!:)

  • 提问者 学无止境呀呀呀 #1
    那是不是可以理解为当while(root.date.compareTo(e)!=0)时去找待删除节点吗?=0就是找到了,然后去判断左右子树存不存在的情况进行删除?
    2020-11-25 21:12:35
  • liuyubobobo 回复 提问者 学无止境呀呀呀 #2
    是的。其实和链表一样。只不过当 node.date.compareTo(e)!=0 的时候,要根据是 > 0 还是 <0,去选择下一个要找的节点是左节点还是右节点而已:)
    2020-11-26 04:11:06
  • 提问者 学无止境呀呀呀 回复 liuyubobobo #3
    public void remove(E e){
    if (root.size==0)return;
    Node curNode=root;
    Node n=null;
    while (curNode.data.compareTo(e)!=0){
    n=curNode;
    if (curNode.data.compareTo(e)<0) {
    curNode=curNode.right;
    }else if (curNode.data.compareTo(e)>0){
    curNode=curNode.left;
    }
    }
    if (null==curNode.right) {
    Node leftNode=curNode.left;
    curNode.size--;
    n.left=leftNode;
    }else if (null==curNode.left){
    Node rightNode=curNode.right;
    curNode.size--;
    n.right=rightNode;
    }else{
    Node successor=minimun(curNode);
    successor.right=removeMin(curNode.right);
    successor.left=curNode.left;
    curNode.left=curNode.right=null;
    curNode=successor;
    root=curNode;
    }

    老师,是这样吗?

    2020-11-26 20:58:01
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
算法与数据结构
  • 参与学习       2583    人
  • 解答问题       1082    个

慕课网算法名师Liuyubobobo,5年集大成之作 从0到工作5年,算法与数据结构系统解决方案

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师