伸展树学习小结

来源:互联网 发布:android 无法修改mac 编辑:程序博客网 时间:2024/05/29 03:14

伸展树实际上就是一种二叉搜索树,只不过它采用了一个理念:刚刚访问过的数据很可能再次被访问,于是,为了在概率上提高多次查找效率,它采用了一种简单粗暴的方法,即把刚刚访问过的节点移动到根节点的位置。这与我们以前学过的平衡二叉树有异曲同工之妙,都是为了保证效率而对树结构进行重构。下面我们看一下这种重构是怎么实现的。


假设要查找的节点是X,其父节点为Y(如果存在),父节点的父节点为Z(如果存在)


1. X的父节点Y为根节点。以X为轴,顺时针旋转Y,X的右孩子(如果存在)变为Y的左孩子,Y变为X的右孩子,其余不变。


2. X、Y、Z呈“一”字形结构。以X为轴,顺时针旋转Y,Z,Y的右孩子变为Z的左孩子,X的右孩子变为Y的左孩子,Y变为X的右孩子,Z变为Y的右孩子。


3. X、Y、Z呈“之”字形结构(都这么叫,但我觉得一点也不像。。。)。这种形式需要先转换为“一”字形结构,再按“一”字结构转换。首先逆时针旋转XY这条边,使Y成为X的左孩子,X的左孩子为Y的右孩子,X为Z的左孩子,再按照“一”字形转换即可。


0 0
原创粉丝点击