(1) 搜索80
找到根结点,根结点为50,80大于50,则找根结点的右子树,右子树为60,60仍然小于80,继续查找右子树,右子树为85,85大于80,则转向85的左子树,左子树为70,70小于80,但是70并没有孩子,表示80并不存在于这棵树上面,将70进行伸展,具体伸展的过程如下:(下面的图形均是由Visio绘制的截图)
左指针部分:
右指针部分:
再将70的左孩子和右孩子分别作为60的右孩子和85的左孩子
最后将85和60分别当做70的右孩子和左孩子
得到的树如下:
(2) 插入80
根据第一题的分析可以得到,80应该是70的右孩子
故,我们应该先将80插入到70的右孩子处,然后进行伸展
插入以后的树:
第一步:x=50,y=60进行伸展得到左指针对应的部分:
第二步:在x=85,y=70,将85部分挂到右指针,再将x=70,y=80,将70作为60的右孩子,80单独在中间
第三步:将80的左孩子和右孩子分别作为左指针对应的结点右孩子和右指针对应的结点左孩子
得到伸展后的图形如下:
(3) 删除30
首先需要找到30
X=50,y=30,根据规则可以得到:
右边指针部分是:
左边指针部分为空
中间部分为:
第二步:x=30,将30的左右孩子分别挂到左指针和右指针的结点的左孩子上,得到如下:
将30进行伸展,再删除。本次删除操作,取得是根结点的右孩子的左孩子,作为删除以后的根结点。
删除30以后的左指针指向:
右边指针指向:
下一步:x=50,y=40,将50挂到右指针,40单独拿出来
左指针部分不改变,右指针部分如下:
最后将40的左孩子放到左指针对应的孩子的右孩子位置处,40的右孩子放到右指针对应的孩子的左指针处,得到最后的图像是: