定义
二叉排序树(Binary Sort Tree)又称二叉查找树,对排序和查找非常有用的数据结构。
二叉树很明显最多有两个分支,如果有左子树的话,左子树上所有的节点值均小于它父节点值,如果有右子树的话,右子树上所有的节点值均大于它父节点值。
二叉树是一个递归定义,所以中序变量可以得到一个节点值递增的序列,如下:
中序遍历得到:3,12,24,37,45,53,61,78,90,100
二叉树的二叉链表存储表示
typedef struct {
KeyType key; //关键字项
InfoType otherinfo; //其他数据项
}ElemType;
typedef struct BSTNode {
ElemType data; //每个节点指针的数据包括关键字和其他数据
struct BSTNode *lchild,*rchild; //左右孩子指针
}BSTNode,*BSTree;
二叉排序树的查找
用上面的二叉树想要查找3,首先和45比较,比45小进入左子树,然后和12比较,比12小进入左子树,然后就查到3了,是不是很快,查找比较次数为3次,取决于值所在的深度,有人说还不如排好序,第一个就是3,那么53呢,总之各有优点。
算法分析
二叉排序树的平均查找长度和树的形态有关,如果是单支树的话其平均查找长度为(n+1)/2,如果和折半判定树类似其算法时间复杂度O(log2n),为了和形态无关我们需要规定一种合理的形态,那就是平衡二叉树,左右子树的深度之差绝对值不超过1,左右子树也是平衡二叉树。
二叉排序树的插入
基本步骤就是先比较等于就停止插入,小于就插入到左子树中,大于就插入到右子树中。
二叉排序树的删除
缺失右子树的用左孩子填补,缺失左子树又孩子填补,被删除的节点左右子树都存在在左子树中找个中序最后一个结点填补。