[Data Structure & Algorithm] 二叉排序树
Posted break-dawnn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Data Structure & Algorithm] 二叉排序树相关的知识,希望对你有一定的参考价值。
二叉排序树 BST
- 性质
- 若左子树非空,则左子树上所有记录的值<(=)根记录的值
- 若右子树非空,则右子树上所有记录的值>(=)根记录的值
- 左右子树本身又是一颗二叉排序树
- 按中序遍历,可以得到一个递增有序序列
- 空树也是二叉排序树
- 即 构造二叉排序树 = 二叉排序树的插入操作
- 存储 - 一般用二叉链表
二叉排序树的插入
- 基本思路
1.如果二叉树为空,把要插入的关键字作为根结点
2.如果二叉树不为空,将要插入的关键字和根结点比较,大于根结点的插入到右子树,否则插入到左子树
二叉排序树的查找
- 基本思路
1.将要查找的关键字和根结点比较
2.1如果=根结点,直接返回
2.2如果>根结点,到右子树中查找
2.3如果<根结点,到左子树中查找
3.重复1,2,直到找到相等的值或查询到空结点 - 平均查找长度 ABL
- 含有n个结点的二叉排序树的ABL不唯一,取决于树的形态
- 最慢 - (n+1)/2
- 构造时插入顺序表 - 与顺序查找相同
- 最快 - log2n
- 与折半查找的判定树的形态相同
- 最慢 - (n+1)/2
- 含有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
以上是关于[Data Structure & Algorithm] 二叉排序树的主要内容,如果未能解决你的问题,请参考以下文章
[Data Structure & Algrithom] 二叉树
[Data Structure & Algorithm] 归并排序
[Data Structure & Algorithm] 线性表的查找
[Data Structure & Algorithm] 二叉排序树