查找 - 树上的查找 - 二叉排序树(五)
)在二叉排序树上进行查找时的平均查找长度和二叉树的形态有关
二分查找法查找长度为n的有序表 其判定树是惟一的 含有n个结点的二叉排序树却不惟一 对于含有同样一组结点的表 由于
结点插入的先后次序不同 所构成的二叉排序树的形态和深度也可能不同
【例】下图(a)所示的树 是按如下插入次序构成的
下图(b)所示的树 是按如下插入次序构成的
在二叉排序树上进行查找时的平均查找长度和二叉树的形态有关
①在最坏情况下 二叉排序树是通过把一个有序表的n个结点依次插入而生成的 此时所得的二叉排序树蜕化为棵深度为n的单支
树 它的平均查找长度和单链表上的顺序查找相同 亦是(n+ )/
②在最好情况下 二叉排序树在生成的过程中 树的形态比较匀称 最终得到的是一棵形态与二分查找的判定树相似的二叉排序
树 此时它的平均查找长度大约是lgn
③插入 删除和查找算法的时间复杂度均为O(lgn)
( )二叉排序树和二分查找的比较
就平均时间性能而言 二叉排序树上的查找和二分查找差不多
就维护表的有序性而言 二叉排序树无须移动结点 只需修改指针即可完成插入和删除操作 且其平均的执行时间均为O(lgn)
因此更有效 二分查找所涉及的有序表是一个向量 若有插入和删除结点的操作 则维护表的有序性所花的代价是O(n) 当有序表是
静态查找表时 宜用向量作为其存储结构 而采用二分查找实现其查找操作;若有序表里动态查找表 则应选择二叉排序树作为其存
储结构
( )平衡二叉树
为了保证二叉排序树的高度为lgn 从而保证然二叉排序树上实现的插入 删除和查找等基本操作的平均时间为O(lgn) 在往树
中插入或删除结点时 要调整树的形态来保持树的 平衡 使之既保持BST性质不变又保证树的高度在任何情况下均为O(lgn) 从而
确保树上的基本操作在最坏情况下的时间均为O(lgn)
注意
①平衡二叉树(Balanced Binary Tree)是指树中任一结点的左右子树的高度大致相同
②任一结点的左右子树的高度均相同(如满二叉树) 则二叉树是完全平衡的 通常 只要二叉树的高度为O( gn) 就可看作是平
衡的
③平衡的二叉排序树指满足BST性质的平衡二叉树
④AVL树中任一结点的左 右子树的高度之差的绝对值不超过 在最坏情况下 n个结点的AVL树的高度约为 lgn 而完全平
衡的二叉树度高约为lgn AVL树是接近最优的
lishixinzhi/Article/program/sjjg/201311/23811