一、前言
Treap平衡树是一种树形数据结构,它是对二叉查找树的一种优化方式,但是学习的过程是真的非常的…痛苦。
二、二叉查找树的概念
首先,我们称具有以下3个性质的树为二叉查找树(BST)
1.左子树上所有结点的值均小于或等于它的根结点的值。
2.右子树上所有结点的值均大于或等于它的根结点的值。
3.左、右子树也分别为二叉排序树。
如图

在这张图中我们可以发现,在二叉查找树中,从根结点开始查找一个点的时间复杂度为logn级别,在我们想对树进行插入查找的时候都非常方便。
但是很遗憾,二叉查找树是有着它的缺陷的,例如:假如我们最开始有一个这样的树

然后我们如果不断插入比6小的数,那么二叉查找树就会变成…

一点都不好看!而且这样的话,我们查找的时间复杂度就又变成了n了,二叉查找树就失去了优势。
三、Treap平衡树的概念
对于上面那张图,我们觉得它一点也不方便,也不好看,我们希望那棵树是这个样子的

即使不能变成上图那种最完美的树,但是我们也还是想要去达到这个效果
然后,我们了解一下树的旋转
下面这张图就是把节点4右转后形成的新图,仍然符合二叉查找树的定义,左转同理

旋转又什么用呢?我们先再看看那张不漂亮的图

如果我们以节点5右转后会发生什么呢?

唉?好像好看多了,那这样的话岂不是我们多旋转几次不就越来越好看了吗?<

本文介绍了一种名为Treap的平衡二叉查找树,通过随机分配的优先级进行节点旋转,保持树的平衡,提高查找效率。文章详细讲解了Treap的基本概念、平衡原理及其实现代码。
2440

被折叠的 条评论
为什么被折叠?



