二叉排序树的删除

  在删除二叉排序树上某个结点之后,仍然保持二叉排序树的特性,即:二叉排序树中任一结点x,其左(右)子树中任一结点y(若存在)的关键字必小(大)于x的关键字

 

删除结点有三种情况

  1.被删除的结点是叶子

  2.被删除的结点只有左子树或者只有右子树

  3.被删除的结点既有左子树,也有右子树

 

第一种:被删除的结点是叶子

由于要删除的结点p即无左子树,又无右子树,

因此删除结点p之后不会破坏二叉排序树结构的完整性,

只要将其双亲结点f原来指向p的指针改为指向空即可

 

 

第二种:被删除的结点只有左子树或者只有右子树

要删除的结点p只有左子树PL或者右子树PR,

这时候只要将p的左子树PL或p的右子树PR

直接作为其双亲结点f 的相应左子树或右子树即可


 

第三种:被删除的结点既有左子树,也有右子树

要删除的结点p只有左子树PL或者右子树PR,

第一种方法是:

  要删除结点p若为其双亲结点f 的右子树,

  则令p的左子树PL成为其双亲结点f 的右子树,

  然后令p的右子树PR成为中序遍历下p的直接前驱s的右子树

  例一:

   

先写出该树的中序遍历顺序:CL,C,QL, Q,SL,S,P,PR,F

此时p的直接前驱为S,则删除P的时候,P的右子树作为S的右子树

同时将p的左子树作为其双亲节点的左子树即可

  

 

第二种方法是:

令p的中序下的直接前驱s或直接后继结点代替p结点,

同时删除其中序下的前驱结点s(或中序下的后继结点)

 

转载于:https://www.cnblogs.com/-beyond/p/6202108.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值