[Data Structure & Algorithm] 二叉排序树
二叉排序树 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
欢迎关注本站公众号,获取更多信息