二叉排序树和平衡二叉树
1.二叉排序树
二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树
1)二叉排序树性质
1.若左子树不空,则左子树上所有结点的值均小于根节点的值;同理,若右子树不空,则右子树上所有节点的值均大于根节点的值;
2.左右子树也分别为二叉排序树;
3.中序遍历二叉排序树,可以得到一个递增的有序序列。
2)二叉排序树的插入和删除
(1)插入结点
1.树空时直接插入;
2.插入的结点值小于根节点值,插入到左子树;反之,插入到右子树;
3.新插入的结点必为叶子结点。
(2)删除结点
1.若要删除的结点为叶结点,则直接删除;
2.若结点Z只有左子树或只有右子树,则结点Z的子树替代结点Z的位置;
3.若结点Z有左右子树,则结点Z的直接后继(前驱)替代结点Z,并删去树中的直接后继(前驱)。
3)查找效率分析
就查找的平均时间性能而言,二叉排序树上的查找与折半查找类似,但就维护表的有序性而言,二叉排序树更高效,因为它无需移动节点,只需修改指针即可完成二叉排序树的插入和删除操作。
二叉排序树查找在一般的情况下,需要的查找时间取决于树的深度:
1.当二叉排序树接近于满二叉树时,其深度为h,因此在情况下的查找时间 O ( log 2 h ) O(\log_2 h) O(log2h),与折半查找是同数量级的。
2.当二叉树形成形成单枝树时,其深度为n,n为结点数,最坏情况下查找时间为 O ( n ) O(n) O(n)与顺序查找属于同一数量级。
2.平衡二叉树
1) 平衡二叉树定义
1.任意节点的左右子树高度差的绝对值不超过1;
2.平衡二叉树满足平衡的最少结点为:
n
0
=
0
,
n
1
=
1
,
n
2
=
2
;
n
k
=
1
+
n
k
−
1
+
n
k
−
2
n_0=0,n_1=1,n_2=2; n_k=1+n_{k-1}+n_{k-2}
n0=0,n1=1,n2=2;nk=1+nk−1+nk−2
n 2 = 1 + n 1 + n 0 = 2 ; n 3 = 1 + n 2 + n 1 = 4 ; n 4 = 1 + n 3 + n 2 = 7 ; n 5 = 1 + n 4 + n 3 = 12....... n_2=1+n_1+n_0=2;n_3=1+n_2+n_1=4;n_4=1+n_3+n_2=7;n_5=1+n_4+n_3=12....... n2=1+n1+n0=2;n3=1+n2+n1=4;n4=1+n3+n2=7;n5=1+n4+n3=12.......
2) 平衡二叉树插入(每次调整最小不平衡子树)
1.LL平衡旋转(右单旋转)
a的左孩子的左子树上插入(b的原右子树作为a的左子树)
2.RR平衡旋转(左单旋转)
a的右孩子的右子树上插入(b的原左子树作为a的右子树)
3.LR平衡旋转(先左后右)
a的左孩子的右子树上插入(c的原左子树作为b的右子树,原右子树作为a的左子树)
4.RL平衡旋转(先右后左)
a的右孩子的左子树上插入(c的原左子树作为a的右子树,原右子树作为b的左子树)
3)查找效率
1.含有n个结点的平衡二叉树最大深度为 O ( log 2 n ) O(\log_2 n) O(log2n)。
2.平均查找长度为 O ( log 2 n ) O(\log_2 n) O(log2n),最坏 O ( n ) O(n) O(n)。