首页 > TAG信息列表 > 单旋
2021-8 清北学堂 省选 数据结构 内容回顾
主讲人:李欣隆 D1: Treap(tree+heap)性质:每个点随机分配一个权值,使treap同时满足堆性质和二叉搜索树性质,复杂度 \(O(n\log n)\)。 旋转(rotate)有单旋和双旋, treap只需要单旋,这一点比较简单。 旋转时最好先记录每个点的编号,再断连,再重构,最后按照点的编号调用函数 update(x)。 Spl数据结构 avl左旋
左旋——自己变为右孩子的左孩子;右旋——自己变为左孩子的右孩子; 以上口诀+动图=完美 高度平衡的搜索二叉树 一棵平衡树,或是空树,或是具有以下性质的二叉搜索树:左子树和右子树都是AVL树,且左右子树的高度之差的绝对值不超过1。 平衡化旋转 AVL树相较于普通的二叉搜索树,自主要的就是AVL树
定义 平衡因子(Balance Factor ,简称BF ): BF(T) = hL -hR ,其中 hL 和 和 hR 为 分别为 T 的左、右子树的高度 平衡二叉树又称为AVL树,其定义如下: 空树,或者任一节点左右子树高度差的绝对值不超过1的二叉搜索树,即|BF(T)| ≤ 1。 AVL树的插入(旋[AHOI2017/HNOI2017]单旋
题目 点这里看题目。 分析 最妙的地方在于,这道题其实是用一种数据结构模拟另一种数据结构! 我们需要维护深度和树的结构,以下对于每个操作进行分别讨论。 插入一个新节点 可以发现,这个新节点一定会成为自己的前驱或者后继中深度较大者的儿子。 然后可以更新深度数据结构
1.顺序表 1.顺序表由数组,最后一个元素的位置构成,Last从-1开始 2.堆栈 1.堆栈,由数组,栈的最大规模,栈顶构成,自己写操作集时,可以自己定规则 2.c++自带函数stack 3.二叉树 1.二叉树的遍历可以通过递归函数实现(以前感觉递归函数反人类,现在感觉是真好用啊) 2.遍历也可通过堆栈或队列来实现[AH2017/HNOI2017] 单旋 - Splay
Splay 暴力维护节点信息即可 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int delta,t1,t2,t3,k[1000005],ch[1000005][2],fa[1000005],a[1000005],t[1000005],n,ind,root,opera[C++小工修炼手册XXVIII------AVL(平衡二叉搜索树)超级详细
二叉搜索树虽然可以提升搜索的效率,但是有缺陷,就是建树的时候的参数,是有序的,或者是接近有序的,那么就会退化成单支树,搜索效率就会变成o(n) 于是发明了一种解决上述问题的方法:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结[AH2017/HNOI2017]单旋
题目 \(\rm splay\)水平太差,于是得手玩一下才能发现规律 首先插入一个数,其肯定会成为其前驱的右儿子或者是后继的左儿子,进一步手玩发现前驱的右儿子或者是后继的左儿子一定只有一个是空的,我们找到这个空位置插入就好了 于是我们需要一个\(\rm std::set\)来查找前驱后继,同时我们还