二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称
二叉搜索树。是
数据结构中的一类。在一般情况下,查询效率比
链表结构要高。
(1)若左子树不空,则左子树上所有结点的值均小于它的
根结点的值;
(2)若右
子树不空,则右子树上所有结点的值均大于它的根结点的值;
【注】:以上的三种定义在不同的
数据结构教材中均有不同的定义方式 但是都是正确的 在开发时需要根据不 同的需求进行选择
在一般情况下,设 P(n,i)为它的左子树的结点个数为 i 时的平均查找长度。结点个数为 n = 6 且 i = 3; 则 P(n,i)= P(6, 3) = [ 1+ ( P(3) + 1) * 3 + ( P(2) + 1) * 2 ] / 6= [ 1+ ( 5/3 + 1) * 3 + ( 3/2 + 1) * 2 ] / 6
注意:这里 P(3)、P(2) 是具有 3 个结点、2 个结点的二叉
分类树的平均查找长度。 在一般情况,P(i)为具有 i 个结点二叉分类树的平均查找长度。
平均查找长度= 每个结点的深度的总和 / 总结点数
P(2) = (1+2)/ 2 = 3/2∴ P(n,i)= [ 1+ ( P(i) + 1) * i + ( P(n-i-1) + 1) * (n-i-1) ] / n
与
次优二叉树相对,二叉排序树是一种
动态树表。其特点是:树的结构通常不是一次生成的,而是在查找过程中,当树中不存在关键字等于
给定值的结点时再进行插入。新插入的结点一定是一个新添加的
叶子结点,并且是查找
不成功时查找路径上访问的最后一个结点的左孩子或右孩子结点。
判断被插结点是其双亲结点的左、右儿子。将被插结点作为
叶子结点插入。
每个结点的C(i)为该结点的层次数。最坏情况下,当先后插入的关键字有序时,构成的二叉排序树蜕变为单支树,树的深度为其
平均查找长度(n+1)/2(和
顺序查找相同),最好的情况是二叉排序树的形态和折半查找的
判定树相同,其平均查找长度和
log 2 (n)成正比。
也就是说,最好情况下的算法
时间复杂度为O(1),最坏情况下的算法时间复杂度为O(n)。