二叉排序树和平衡二叉树

二叉排序树和平衡二叉树

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+nk1+nk2

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)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值