二叉排序树 BST
- 性质
- 若左子树非空,则左子树上所有记录的值<(=)根记录的值
- 若右子树非空,则右子树上所有记录的值>(=)根记录的值
- 左右子树本身又是一颗二叉排序树
- 按中序遍历,可以得到一个递增有序序列
- 空树也是二叉排序树
- 存储 - 一般用二叉链表
二叉排序树的插入
- 基本思路
1.如果二叉树为空,把要插入的关键字作为根结点
2.如果二叉树不为空,将要插入的关键字和根结点比较,大于根结点的插入到右子树,否则插入到左子树
二叉排序树的查找
- 基本思路
1.将要查找的关键字和根结点比较
2.1如果=根结点,直接返回
2.2如果>根结点,到右子树中查找
2.3如果<根结点,到左子树中查找
3.重复1,2,直到找到相等的值或查询到空结点
- 平均查找长度 ABL
- 含有n个结点的二叉排序树的ABL不唯一,取决于树的形态
二叉排序树的删除
- 基本思路
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
posted @
2018-10-21 13:39
break大蜗牛
阅读(
166)
评论()
编辑
收藏
举报