参考自:《数据结构漫谈》-许昊然 dfs序是树在dfs先序遍历时的序列,将树形结构转化成序列问题处理。 dfs有一个很好的性质:一棵子树所在的位置处于一个连续区间中。 ps:deep[x]为x的深度,l[x]为dfs序中x的位置,r[x]为dfs序中x子树的结束位置 1.点修改,子树和查询 在dfs ...
分类:
其他好文 时间:
2017-05-12 22:24:45
阅读次数:
164
1、递归添加树节点 先找出所有根节点,添加到树,然后根据根节点的id遍历找出所有对应子节点添加到其子节点处。 递归要有跳出条件,方法要自己调用自己。 2、树的广度优先遍历 先遍历最外围的,如果有子集下次遍历。 3、二分叉查找(针对有序列表) 取中间位索引,如果这个数等于要查找的数则返回,如果不是这个 ...
分类:
其他好文 时间:
2017-05-10 14:53:58
阅读次数:
246
树链剖分求LCA 树链剖分需要将树的边分为重边和轻边。每个节点和他的儿子之间只能有一条重边,连接着该节点与他儿子中子树节点最大的一个。一系列连续起来的重边叫做重链,重链上的每个点的top值都是重链的顶端节点。 用树链剖分来求LCA,就需要每次比较top_x与top_y的深度,将深度较大的点变为top ...
分类:
其他好文 时间:
2017-05-05 21:50:54
阅读次数:
165
思路: (我也不知道这是不是正解) ST表预处理出来原数列的两点之间的min 再搞一个动态开节点线段树 节点记录ans 和标记 lazy=-1 当前节点的ans可用 lazy=0 没被覆盖过 else 区间覆盖 push_up的时候要注意好多细节,, 数组尽量往大开 ...
分类:
其他好文 时间:
2017-05-05 20:20:02
阅读次数:
366
部分转载自:http://blog.csdn.net/u013076044/article/details/45915745 定义 找到一个点,其所有子树中最大的子树节点数最少,那么这个点就是整棵树的重心。 在树的总点数为偶数时,可能会有两个重心。 性质 性质 1 :树中所有点到某个点的距离和中,到 ...
分类:
其他好文 时间:
2017-05-04 16:18:30
阅读次数:
113
可以查看改地址: https://www.zybuluo.com/huangyichun/note/739561 显示效果更好 定义:二叉查找树是一棵二叉树,且每个节点的值都大于左子树的值,小于右子树的值。 如下图所示: 其中数字代表二叉查找树的键,字母代表二叉查找树的值 我们可以通过二叉树的中序遍 ...
分类:
其他好文 时间:
2017-05-01 18:22:22
阅读次数:
244
解题思路: 标准的区间更新。 树节点如果只存和会导致每次加数的时候都要更新到叶子节点,速度太慢(O(nlogn)) , 所以树节点应该存原来初始的和nsum和当刚好是这段区间所累加的和lnc。本节点区间的和实际上是nsum+lnc*(R-L+1)。 每次插入将路过的节点中的nsum加上插入的c*(r ...
分类:
其他好文 时间:
2017-05-01 16:01:10
阅读次数:
195
此题题意很好懂: 给你N个数,Q个操作,操作有两种,‘Q a b ’是询问a~b这段数的和,‘C a b c’是把a~b这段数都加上c。 需要用到线段树的,update:成段增减,query:区间求和 介绍Lazy思想:lazy-tag思想,记录每一个线段树节点的变化值,当这部分线段的一致性被破坏我 ...
分类:
其他好文 时间:
2017-05-01 10:00:06
阅读次数:
236
http://poj.org/problem?id=3099 树的重心:找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心 求树的重心 如何在点中构造符合条件的树 得到树后 从任意一个点出发 dfs一次找到离这个点最远的点作为root1 在以root1出发 同样的方式求得ro ...
分类:
其他好文 时间:
2017-04-21 22:51:59
阅读次数:
194
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 分析:采用递归的思想,先找出根节点,左子树元素都必须比根节点小,右子树节点都比根节点大,否则返回false. 得到子树(子序列)的两种方法: ①用下标把数组 逻 ...
分类:
其他好文 时间:
2017-04-18 21:19:18
阅读次数:
160