平衡二叉树
文章平均质量分 69
LifeIsStudy
爱好编程,正在学习算法,python,c/c++等~~~
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
平衡二叉树总结一:二叉搜索树
这段时间一直再刷leetcode,现在刷了快一半了吧,感觉没什么状态了,再继续刷可能就不太好了,想想不如回头再补补算法吧。总结了自己在基础算法上的一些短板,准备后面这些时间把它们都补上。好了,上正题。 平衡二叉树算是应用最广泛的树型结构了吧,至少在内存里面是吧。刚开始学数据结构的时候,树的那一章基本没怎么看,大部分精力都放在了排序和图论里,而且感觉树也挺简单的,现在刷题才慢慢发现这种数据结构原创 2017-01-03 10:20:38 · 509 阅读 · 0 评论 -
平衡二叉树总结二:avl树
avl树是第一个创造出来的平衡二叉树,之后很多的平衡树都是基于AVL树的基本操作——旋转来实现的。avl树结构如下:struct avl{ avl* left; avl* right; int val,h;//val值域,h高度。};typedef avl* tree;//获取高度的函数int height(tree t){ if(t==NULL)return原创 2017-01-03 21:28:55 · 430 阅读 · 0 评论 -
平衡二叉树总结三:treap树(树堆)
类似avl树的还有红黑树和伸展树,然而编程确实很复杂,我先总结treap树吧,比赛啥的也能用得上。从树堆这个名字不难看出treap这种数据结构应该同时具有二叉搜索树与二叉堆的某些性质,实际上树堆首先是一颗二叉搜索树,也就是说它满足 left 0.treap树一般结构struct treap{ treap* left; treap* right; int val,prior原创 2017-01-04 09:39:24 · 1086 阅读 · 0 评论 -
平衡二叉树总结四:替罪羊树(scapegoat tree)
之前在查treap树的时候,偶然在知乎看到一篇比treap树还简单的替罪羊树的介绍,传送门:https://zhuanlan.zhihu.com/p/21263304,大神还是写的很好的,有兴趣的可以去看下,当然也可以看我的总结。一 、平衡条件 左子树大小 二、 替罪羊树总结起来就两个操作: 1.拉平,当树不满足平衡条件时,把树伸展成链表。 2.重构,递归的选取链表原创 2017-01-05 15:35:32 · 1824 阅读 · 0 评论 -
随机化的二叉搜索树总结(treap,随机输入)
看数据结构的时候,书里面说对于随机输入的序列,BST的期望深度是log(n),当时没当一回事(其实是证明看不懂),这两天复习二叉搜索树遇到树堆(treap)又回去翻了一下证明过程,其实还蛮简单的。 总结起来也就一句话: 只要保证BST的任意子树的根节点选取是随机的,那么这颗树的期望深度就必然是log(n).证明如下: 1.首先要定义一个概念——内部路径长(D(N)),也就是原创 2017-01-06 22:01:58 · 2380 阅读 · 0 评论 -
跳表(skiplist)
之前看随机化的平衡树时看到了跳表这种数据结构,在网上查了些资料,自己实现了一下,确实比各种平衡树好写多了,并且效率也不低。跳表这种数据结构其实就是对链表的扩展,采用多层链表的形式,每高一层节点数量大约减少1/2。例如:1-------------->5----------------->null1----->3------>5----->7-------->null原创 2017-01-09 21:18:07 · 372 阅读 · 0 评论
分享