因为排序二叉树的有序性,建立与查询都不是很难,唯一的难点是删除结点的操作,删除节点且要保证该树仍为二叉树且仍满足有序的性质 二叉树的删除操作主要有三种情况: 所删除的节点是叶子节点,这样就可以先遍历这个树,然后找到需要删除的节点,把它free掉就好 所删除的节点只有一个左子结点,或者只有一个右子结点 ...
分类:
编程语言 时间:
2018-11-15 21:14:29
阅读次数:
141
http://codeforces.com/problemset/problem/1065/F 你有一棵带有n个结点的树,根是结点1。有一个标记,最初在根结点处。你可以将标记移动到其他结点处。假设标记当前所在结点为v,你可以做出以下两种操作: 将标记移动到v子树的任一叶子处。 如果是结点v为叶子,则 ...
分类:
其他好文 时间:
2018-11-15 17:17:19
阅读次数:
171
Leaf Sets 题意:给你一棵树,树上有n个点,只有一条边的点叫做叶子,现在要求把所有的叶子分组,每个组内的所有叶子的距离都不能大于k。 题解: 我们可以随意找一个不是叶子的节点当做这颗树的根节点,这样这棵树中叶子就不会出现在上方了,现在我们先把所有的叶子都单独当做一个集合来。 假设现在我们在处 ...
分类:
其他好文 时间:
2018-11-15 17:16:03
阅读次数:
190
这个题意说人话就是:一棵带标号的有根树,编号满足堆性质,根节点有$x$个儿子是叶子($x\in A$),另外的$2$个儿子也是这样的一棵树,求不同的树的个数 设$f_n$为答案,枚举那两棵子树的大小$i,j$,那么$f_i=\frac12\sum\limits_{1\leq j,k\lt i}[i- ...
分类:
其他好文 时间:
2018-11-15 10:26:21
阅读次数:
150
(首先用#号填充,使二叉树的叶子结点全部为#) 输入:AB#CD##E##F#GH### 输出见下图: 计算二叉树的所有叶子节点的数量: 当一个节点的左孩子和右孩子都为空时,它是叶子节点。 使用递归如果能找到就返回1,如果节点为NULL返回0,否则返回count(t->lchild)+ count( ...
分类:
其他好文 时间:
2018-11-14 21:03:13
阅读次数:
196
给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最大深度 3 。 int maxDepth(Tre ...
分类:
其他好文 时间:
2018-11-14 20:52:34
阅读次数:
155
"传送门" 给定一棵树,每个点有点权,选定$k$个叶子,满足根到$k$个叶子的所有路径所覆盖的点权和最大。 首先考虑一个贪心,每一次选择权值最大的一条链,然后把这条链上的权值清零,重复$k$次 于是~~很显然~~这样的贪心可以等价于把这棵树给剖成若干条链。那么考虑用长链剖分来搞,只要把链的长度换成所 ...
分类:
其他好文 时间:
2018-11-13 14:19:43
阅读次数:
98
B+树 B+树是B树的一种变体,也属于平衡多路查找树,大体结构与B树相同,包含根节点、内部节点和叶子节点。多用于数据库和操作系统的文件系统中,由于B+树内部节点不保存数据,所以能在内存中存放更多索引,增加缓存命中率。另外因为叶子节点相连遍历操作很方便,而且数据也具有顺序性,便于区间查找。 B+树特点 ...
分类:
编程语言 时间:
2018-11-12 14:57:33
阅读次数:
159
2-3树 2-3树,是最简单的B-树,其中2、3主要体现在每个非叶子节点都有2个或3个子节点,B-树即是平衡树,平衡树是为了解决不平衡树查询效率问题,常见的二叉平衡书有AVL树,它虽然提高了查询效率,但是插入操作效率不高,因为它需要再每次插入节点后维护树的平衡,而为了解决查询效率同时有兼顾插入效率, ...
分类:
编程语言 时间:
2018-11-12 14:57:25
阅读次数:
183
删除操作 删除操作比较复杂,主要是因为删除的项可能在叶子节点上也可能在非叶子节点上,而且删除后可能导致不符合B树的规定,这里暂且称之为导致B树不平衡,于是要进行一些合并、左旋、右旋等操作,使之符合B树的规定(即让B树平衡)。另外,如果是删除非叶子节点项需要先找到中序前驱来替换。 情况一 要删除的项在 ...
分类:
编程语言 时间:
2018-11-12 14:49:32
阅读次数:
175