• 二叉排序树


    1、二叉排序树删除节点P

    假设节点P是节点F的左子树

    1)节点P无子节点

          直接删除,其他节点不动。

    2)节点P只有左子节点Pl或者右子节点Pr

          删除P,将Pl或者Pr挂载为F节点的左子树。如果P为F的右子树,则挂载为F的右子树。这样也不会破坏二叉排序树的特性(指排序的变化)。

    3)节点P既有左子树Pl,又有右子树Pr

          这种情况下,有两种操作方法:一、将左子树Pl挂载为F的左子树,右子树Pr挂载为Pl的最大值子节点S的右子树(最初最大值子节点S一定没有右子树),;二、将Pr的最大子节点S直接替换到P的位置,然后S的左子树(假如有的话)挂载为S的双亲节点的右子树。

          假如P是节点F的右子树:一、将Pr挂载为F的右子树,Pl挂载到Pr的最小值节点Smin的左子树(即Pr的最左边);二:用Smin替换P,Smin的右子节点挂载为Smin的双亲节点的左子树。

          方法二,是用直接前驱替代P,可以用直接后驱替代P。也会有样的效果。

    以上描述显得难以理解,翻译成自己的理解:删除P后,P的左子树Pl和右子树Pr重新组合为一个二叉排序树,然后挂载为F的左子树。删除P后有4个子节点Pl的根节点、最大值节点S,Pr的根节点、最小值节点Smin,依次以这4个子节点为新的二叉排序树的根节点来进行组合,其中S和Smin作为根节点需要移动位置。

  • 相关阅读:
    过去式和过去进行式
    现在式和现在进行式
    英文文法的最基本规则
    Vue 标签中的ref属性和refs
    APICloud
    小程序
    React 传值 组件传值 之间的关系
    css clip样式 属性功能及作用
    小程序点击预览 为什么显示空白
    小程序
  • 原文地址:https://www.cnblogs.com/shihuvini/p/7261047.html
Copyright © 2020-2023  润新知