二叉排序树的删除

  在删除二叉排序树上某个结点之后,仍然保持二叉排序树的特性,即:二叉排序树中任一结点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(或中序下的后继结点)

 

posted @ 2016-12-20 11:56  寻觅beyond  阅读(19796)  评论(1编辑  收藏  举报
返回顶部