zoukankan      html  css  js  c++  java
  • 二叉排序树的删除

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

  • 相关阅读:
    Django的templates(模板)
    Django的urls(路由)
    Markdown中实现折叠代码块
    图片上传2
    Comparator 排序
    Serializable 序列化为文件
    统计连续签到的方法
    Serializable 序列化为字符串 base64
    Serializable 序列化使用限制
    Serializable 剔除某些不想保存的字段 transient
  • 原文地址:https://www.cnblogs.com/-beyond/p/6202108.html
Copyright © 2011-2022 走看看