没事闲的学学平衡树吧,打代码炒鸡爽的(特别是机械键盘)(无视)。。。
(学习ing)
- 平衡树到底是啥?
- 先看看排序二叉树吧
排序二叉树就是一棵树,啥树呢——就是这样一颗当前节点的左子树的权值都小于当前节点值,右子树的也一样。
这样经过左-中-右的遍历就是一个有序序列。这样一棵树有啥用呢——就是可以维护一个有序的东西,可以动态插入,删除,查询第k大,查询前驱后继(就是有序序列中跟他挨着的那两个),还可以………很多作用,而且最重要的就是它可以转!
- 怎么转呢?
- 先看为什么转:因为这是一个有序序列变的树,所以节点和节点的权值只要是(横着看)是有序的就是排序二叉树,所以(纵向看)是啥样不重要,这样就造成了——排序二叉树的样子随插入顺序变化而变化。
- 那么问题来了,如果我非常(变态)的有序的插入,最后就是一个链。这样所有操作都变回O(n)了。我不白玩了(这能忍吗)。
- 所以要转。。。
我一直不理解为啥叫转。。我觉得这东西横着看好看。。。
估计我是不正常
横着看就是把旋转当成改变节点深度(高度)
经过调整高度之后呢,就可以不改变性质的前提下改变结构,最好的结果就是把它变成一个最优的结构(就是平衡树了)
—————————————分割线———————————————
呼~终于说完排序二叉树(查找树)了。
该说平衡树了—— - 平衡树定义:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
这样的平衡树就可以解决退化的问题了 - 现在常见的平衡树有:
我在这就大概介绍下吧,详细的后续写,放链接。