二叉树 总结例题 1 从中序与后序遍历序列构造二叉树 给定二叉树的后序遍历和二叉树的中序遍历 想法: 1. 先根据后序遍历的最后一个元素构造根节点 2. 寻找根节点在中序遍历中的位置 3. 递归构建根节点的左右子树 总结: 1. 返回类型为pointer,异常情况可以直接返回NULL 2. 上面的代 ...
分类:
其他好文 时间:
2020-02-08 20:52:55
阅读次数:
95
定义 给定一棵有根树,若结点 z 既是结点 x 的祖先,也是结点 y 的祖先,则称 z 是x,y的公共祖先。 在 x,y 的所有公共祖先中,深度最大的一个称为 x,y 的最近公共祖先,记为LCA(x,y)。 LCA(4 , 7) = 2,LCA(6,7) = 5 实现 暴力大法好 若求LCA(4 , ...
分类:
其他好文 时间:
2020-02-04 00:26:56
阅读次数:
62
``` #include #include #include #include using namespace std; const int N=6e5; int n,m,s,t,tot=0,f[N][20],d[N],ver[2*N],Next[2*N],head[N]; queue q; voi... ...
分类:
其他好文 时间:
2020-02-03 16:12:03
阅读次数:
74
无名管道只能在具有公共祖先的两个进程间使用,且建议半双工使用(因为历史上就是半双工,虽然有些系统支持全双工管道)。 无名管道通过pipe函数创建 #include <unistd.h> int pipe(int fd[2]); 其中:参数fd返回两个文件描述符,fd[0]只用来读,是输出,fd[1] ...
分类:
其他好文 时间:
2020-02-02 23:45:57
阅读次数:
91
最近公共祖先 [TOC] 定义:给定一颗有根树,若结点 z 既是 x 的祖先,也是 y 的祖先,则称 z 是 x,y 的公共祖先。 在 x,y 所有的公共祖先中,深度最大的一个称为 x,y 的最近公共祖先,简称$LCA(x,y)$。 求解最近公共祖先一般有三种解法:向上标记法,树上倍增法和 Tarj ...
分类:
其他好文 时间:
2020-02-02 16:13:11
阅读次数:
118
题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。 输入格式 第一行包含三个正整数 N,M,S,分别表示树的结点个数、询问的个数和树根结点的序号。 接下来 N?1 行每行包含两个正整数 x,y,表示 x 结点和 y 结点之间有一条直接连接的边(数据保证可以构成树)。 接下来 M ...
分类:
其他好文 时间:
2020-02-01 21:10:47
阅读次数:
74
面试题68:树中两个结点的最低公共祖先 题目描述 输入两个树结点,求它们的最低公共祖先。 问题分析 这属于剑指Offer面试案例中探讨的一道问题。 在解答之前要先和面试官确定是否为二叉树,如果是,还要确定是否为二叉搜索树,是否有父引用,或者仅仅是普通二叉树。 案例中确定树为二叉树,不过树可能有两种, ...
分类:
其他好文 时间:
2020-02-01 19:51:17
阅读次数:
77
主席树的综合运用题. 前置芝士 1. "可持久化线段树" :~~其实就是主席树了~~. 2. "LCA" :最近公共祖先,本题需要在$\log_2N$及以内的时间复杂度内解决这个问题. 具体做法 主席树维护每个点到根节点这一条链上不同树出现的次数,然后发现这个东西是可以相减的,于是这条链上每个数出现 ...
分类:
其他好文 时间:
2020-01-31 21:02:56
阅读次数:
94
链接:Miku 这一道题只需要在倍增lca的板子上改一改就可以了。 宽度和深度可以在倍增lca的dfs预处理的时候判断一下就可以,至于最后问的两点之间的距离 首先需要求出两点公共祖先的位置,然后计算他们深度的差,并且按照题目要求分别处理即可 #include<iostream> #include<c ...
分类:
其他好文 时间:
2020-01-19 09:29:56
阅读次数:
77
其实敲树剖敲多了就会手敲,然后就发现其实树剖也是可以求LCA的,根据树剖的经验,我们两遍dfs后关于询问l,r的情况我们就开始跳链,当l,r处于同一个链的时候返回深度较小的那个点就好了,这里给个例题: 题目链接:http://poj.org/problem?id=1330 Description A ...
分类:
其他好文 时间:
2020-01-15 14:14:21
阅读次数:
95