![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树
run around
这个作者很懒,什么都没留下…
展开
-
树的重心
定义: 找到一个点,删除它得到的森林中最大的子树节点数最少,那么这个点就是这棵树的重心。性质: 树中所有点到某个点的距离和中,到重心的距离和是最小的;如果有两个重心,那么他们的距离和一样。求解重心: 只需比较分别删除每一个结点后形成的森林中最大子树的结点数,该指标最小的结点即为树的重心。删除某一结点x得到的子树可以分成两类,一类x的子树,另一类是整棵树中除去以x为根的子树的部分。计算第一类的数...原创 2019-08-27 21:14:22 · 200 阅读 · 0 评论 -
树的直径
树的直径:一棵树的直径就是这棵树上存在的最长路径。求法与结论:两次dfs。第一次任意选一个点进行dfs找到离它最远的点,此点就是最长路的一个端点,再以此点进行dfs,找到离它最远的点,此点就是最长路的另一个端点,于是就找到了树的直径。/*求树的直径两次dfs 复杂度O(2*m)先从任意一个点dfs,找到离这个点最远的点从这个最远的点进行dfs,找到离这个点最远的点 */#incl...原创 2019-08-27 19:49:42 · 151 阅读 · 0 评论 -
树的三种遍历及常见问题
树的遍历共分为3种:先序遍历、中序遍历、后序遍历;故而遍历顺序可理解为:先序遍历:根节点 →左子树 → 右子树中序遍历:左子树 → 根节点 → 右子树后序遍历:左子树 → 右子树 → 根节点那如此抛出一个问题:给定树两个遍历序列的话,那能否从遍历序列恢复原树呢?1、先序+中序: 先序最头找到根节点root,中序找到root所在的位置,序列[0,root-1]即为左子树,[root+1,...原创 2019-07-10 20:01:54 · 923 阅读 · 0 评论 -
LCA(求最近公共祖先)
洛谷3379基本思路:要求两个点的最近公共祖先,首先我们用一个数组fa[x][i]来表示节点x的向上2^i层的祖先编号,先dfs求出每个点的深度和预处理fa数组。再求两个节点的最近公共祖先时,先让深度大的跳到相同的一层,再尝试以log2(depth[x])的跨度跳至祖先节点,相同时不跳(因为可能不是最近的公共祖先),不同时再跳,最后输出跳后的那个点的父亲节点即可#include <ios...原创 2019-07-22 11:21:08 · 137 阅读 · 0 评论