知识大全 查找 - 树上的查找 - 二叉排序树(三)

Posted 结点

篇首语:蹉跎莫遣韶光老,人生唯有读书好。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 查找 - 树上的查找 - 二叉排序树(三)相关的知识,希望对你有一定的参考价值。

  ( )二叉排序树的删除

  从二叉排序树中删除一个结点 不能把以该结点为根的子树都删去 并且还要保证删除后所得的二叉树仍然满足BST性质

  ①删除操作的一般步骤

  ( ) 进行查找

  查找时 令p指向当前访问到的结点 parent指向其双亲(其初值为NULL) 若树中找不到被删结点则返回 否则被删结点是*p

  ( ) 删去*p

  删*p时 应将*p的子树(若有)仍连接在树上且保持BST性质不变 按*p的孩子数目分三种情况进行处理

  ②删除*p结点的三种情况

  ( )*p是叶子(即它的孩子数为 )

  无须连接*p的子树 只需将*p的双亲*parent中指向*p的指针域置空即可

  ( )*p只有一个孩子*child

  只需将*child和*p的双亲直接连接后 即可删去*p

  注意

  *p既可能是*parent的左孩子也可能是其右孩子 而*child可能是*p的左孩子或右孩子 故共有 种状态

  ( )*p有两个孩子

  先令q=p 将被删结点的地址保存在q中;然后找*q的中序后继*p 并在查找过程中仍用parent记住*p的双亲位置 *q的中序后继

  *p一定是*q的右子树中最左下的结点 它无左子树 因此 可以将删去*q的操作转换为删去的*p的操作 即在释放结点*p之前将其

  数据复制到*q中 就相当于删去了*q 具体【 参见动画演示 】

  ③二叉排序树删除算法

  分析

  上述三种情况都能统一到情况( ) 算法中只需针对情况( )处理即可

  注意边界条件 若parent为空 被删结点*p是根 故删去*p后 应将child置为根

  算法

  void DelBSTNode(BSTree *Tptr KeyType key)

  //在二叉排序树*Tptr中删去关键字为key的结点

  BSTNode *parent=NUll *p=*Tptr *q *child;

  while(p) //从根开始查找关键字为key的待删结点

  if(p >key==key) break;//已找到 跳出查找循环

  parent=p; //parent指向*p的双亲

  p=(key key)?p >lchild p >rchild; //在关p的左或右子树中继续找

  

  if(!p) return; //找不到被删结点则返回

  q=p; //q记住被删结点*p

  if(q >lchild&&q >rchild) //*q的两个孩子均非空 故找*q的中序后继*p

  for(parent=q p=q >rchild; p >lchild; parent=p p=p= >lchild);

  //现在情况( )已被转换为情况( ) 而情况( )相当于是情况( )中child=NULL的状况

  child=(p >lchild)?p >lchild p >rchild;//若是情况( ) 则child非空;否则child为空

  if(!parent) //*p的双亲为空 说明*p为根 删*p后应修改根指针

  *Tptr=child; //若是情况( ) 则删去*p后 树为空;否则child变为根

  else //*p不是根 将*p的孩子和*p的双亲进行连接 *p从树上被摘下

  if(p==parent >lchild) //*p是双亲的左孩子

  parent >lchild=child; //*child作为*parent的左孩子

  else parent >rchild=child; //*child作为 parent的右孩子

  if(p!=q) //是情况( ) 需将*p的数据复制到*q

  q >key=p >key; //若还有其它数据域亦需复制

   //endif

  free(p); /释放*p占用的空间

cha138/Article/program/sjjg/201311/23824

相关参考

知识大全 查找 - 树上的查找 - 二叉排序树(二)

  二叉排序树上的运算  ()二叉排序树的插入和生成  ①二叉排序树插入新结点的过程  在二叉排序树中插入新结点要保证插入后仍满足BST性质其插入过程是  (a)若二叉排序树T为空则为待插入的关键字k

知识大全 查找 - 树上的查找 - 二叉排序树(五)

  )在二叉排序树上进行查找时的平均查找长度和二叉树的形态有关  二分查找法查找长度为n的有序表其判定树是惟一的含有n个结点的二叉排序树却不惟一对于含有同样一组结点的表由于  结点插入的先后次序不同所

知识大全 查找 - 树上的查找 - 二叉排序树(一)

  当用线性表作为表的组织形式时可以有三种查找法其中以二分查找效率最高但由于二分查找要求表中结点按关键字有序且不能用链表作存储结构因此当表的插入或删除操作频繁时为维护表的有序性势必要移动表中很多结点这

知识大全 数据结构 9.6 二叉查找树的查找算法

  希赛教育计算机专业考研专业课辅导招生  希赛教育计算机专业考研专业课辅导视频  希赛教育计算机考研专业课在线测试系统  在二叉查找树上进行查找的过程类似于次优查找树  若二叉查找树为空则查找不成功

知识大全 第三部分 树与二叉树[8]

   (四)树与二叉树的应用    二叉排序树    定义  二叉排序树(也称二叉查找树)或者是一棵空的二叉树或者是具有下列性质的二叉树    ()若它的左子树不空则左子

知识大全 查找 - 散列技术 - 散列表的概念

  散列方法不同于顺序查找二分查找二叉排序树及B树上的查找它不以关键字的比较为基本操作采用直接寻址技术在理想情况下无须任何比较就可以找到待查关键字查找的期望时间为O()  散列表的概念  散列表  设

知识大全 数据结构 9.9 二叉查找树的删除算法演示(一)

  希赛教育计算机专业考研专业课辅导招生  希赛教育计算机专业考研专业课辅导视频  希赛教育计算机考研专业课在线测试系统  在一棵二叉树上删除其中某个结点将隔断其祖先和子孙的关系因此在二叉树的抽象数据

知识大全 树 - 线索二叉树 (三)

  线索二叉树的运算  查找某结点*p在指定次序下的前趋和后继结点  ()在中序线索二叉树中查找结点*p的中序后继结点  在中序线索二叉树中查找结点*p的中序后继结点分两种情形  ①若*p的右子树空(

知识大全 查找 - 树上的查找 - B-树

查找-树上的查找-B-树  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  当查找的文件较大且存放在

知识大全 数据结构 9.11 二叉查找树的删除算法演示(三)

  希赛教育计算机专业考研专业课辅导招生  希赛教育计算机专业考研专业课辅导视频  希赛教育计算机考研专业课在线测试系统  在被删结点的左右子树均不空时需删除其前驱结点*s一般情况下应将*s的左子树接