介绍
伸展树是一种特殊的二叉查找树,其基本思想是当一个节点被访问后,需要经过一系列的AVL树的旋转操作将该节点推到根节点。伸展树不要求像AVL树那样保留树的高度或者平衡信息,但是可以保证开始连续
M
次对树的操作最多花费
展开
展开(splaying)操作是将访问的节点通过一系列旋转变为根节点的过程。假设节点
X
是访问路径上非根节点,
1. 自下而上的伸展过程
如果
X
的父节点
第一种情况是之字形,如下图,
第二种情况是一字形,如下图2,
通过自下而上的方式需要保存查询路径上各个节点的指针。
2. 自上而下的伸展过程(参考自博客)
当自上而下搜索某个节点
当查询位置在节点
然后向下走,当查询位置为节点
继续向下走,当查询位置为节点
最后将现存的左、中、右三颗树合并,并将上图中中树的左子树插入到左树的最右节点,中树的右子树插入到右树的最左节点,完成合并,构成如下的以节点