老师,请问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
    1
    public void remove(E e){<br>    if (root.size==0)return;<br>    Node curNode=root;<br>    Node n=null;<br>    while (curNode.data.compareTo(e)!=0){<br>        n=curNode;<br>        if (curNode.data.compareTo(e)<0) {<br>            curNode=curNode.right;<br>        }else if (curNode.data.compareTo(e)>0){<br>            curNode=curNode.left;<br>        }<br>    }<br>    if (null==curNode.right) {<br>        Node leftNode=curNode.left;<br>        curNode.size--;<br>        n.left=leftNode;<br>    }else if (null==curNode.left){<br>        Node rightNode=curNode.right;<br>        curNode.size--;<br>        n.right=rightNode;<br>    }else{<br>        Node successor=minimun(curNode);<br>        successor.right=removeMin(curNode.right);<br>        successor.left=curNode.left;<br>        curNode.left=curNode.right=null;<br>        curNode=successor;<br>        root=curNode;<br>    }<br>

    老师,是这样吗?

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

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

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

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

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

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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