[Data Structure & Algorithm] 二叉排序树

二叉排序树 BST

  • 性质
    • 若左子树非空,则左子树上全部记录的值<(=)根记录的值
    • 若右子树非空,则右子树上全部记录的值>(=)根记录的值
    • 左右子树自己又是一颗二叉排序树
    • 按中序遍历,能够获得一个递增有序序列
  • 空树也是二叉排序树
    • 即 构造二叉排序树 = 二叉排序树的插入操做
  • 存储 - 通常用二叉链表

二叉排序树的插入

  • 基本思路
    1.若是二叉树为空,把要插入的关键字做为根结点
    2.若是二叉树不为空,将要插入的关键字和根结点比较,大于根结点的插入到右子树,不然插入到左子树

二叉排序树的查找

  • 基本思路
    1.将要查找的关键字和根结点比较
    2.1若是=根结点,直接返回
    2.2若是>根结点,到右子树中查找
    2.3若是<根结点,到左子树中查找
    3.重复1,2,直到找到相等的值或查询到空结点
  • 平均查找长度 ABL
    • 含有n个结点的二叉排序树的ABL不惟一,取决于树的形态
      • 最慢 - (n+1)/2
        • 构造时插入顺序表 - 与顺序查找相同
      • 最快 - log2n
        • 与折半查找的断定树的形态相同

二叉排序树的删除

  • 基本思路
    1.查找要删除的关键字,令p指向该关键字,f指向该关键字的父结点
    2.1 若是p为叶子结点,直接删除
    2.2 若是
    p只存在一个子树,将p的子树直接和f相连
    2.3 若是p左右子树都存在,
    方法一 - 将
    p的左子树s(中序序列中的直接前驱)直接和f相连,再把p的右子树做为s的右子树
    方法二 - 将p的左(或右)子树s(中序序列中的直接前驱(或后继))与p交换位置,再删除p,此时*p只会有左(或右)子树,或者无子树,能够参考2.2
相关文章
相关标签/搜索