• 二叉排序树的删除


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

  • 相关阅读:
    操作系统实验报告-信号量的实现和应用
    操作系统实验报告-系统调用
    操作系统实验报告-熟悉实验环境
    Linux下JDK环境变量配置
    BATMAN.adv系列07 过度泛洪的遏制策略与网络重组
    BATMAN.adv系列06 协议栈结构
    BATMAN.adv系列05 数据结构分析
    BATMAN.adv系列04 TVLV包
    BATMAN.adv系列01:BATMAN.adv IV 概述
    Kudu、Hudi和Delta Lake的比较
  • 原文地址:https://www.cnblogs.com/-beyond/p/6202108.html
Copyright © 2020-2023  润新知