题意给定一个二叉树,找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树T的两个结点p、q,最近公共祖先表示为一个结点x,满足x是p、q的祖先且x的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树:root=[3,5,1,6,2,0,8,null,null,7,4]示例1:输入:root=[3,5,1,6,2,0,8,null,null,7,4],
分类:
其他好文 时间:
2020-02-20 09:47:21
阅读次数:
60
题意 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉树: root = [3,5 ...
分类:
其他好文 时间:
2020-02-19 14:48:22
阅读次数:
49
```cpp const int MAX = 100000; vector G[MAXN + 5]; int dep[MAXN + 5], fa[MAXN + 5][20 + 1]; void dfs(int u, int p) { dep[u] = depth[p] + 1; fa[u][0] =... ...
分类:
编程语言 时间:
2020-02-16 12:55:01
阅读次数:
72
LCA(least common ancestors)最近公共祖先 指的就是对于一棵有根树,若结点z既是x的祖先,也是y的祖先(不要告诉我你不知道什么是祖先),那么z就是结点x和y的最近公共祖先。 定义到此。 那么怎么求LCA? 对于朴素思想,就是我要一步一步往上爬。。一步一步走。先把结点x和y整到 ...
分类:
其他好文 时间:
2020-02-15 19:20:38
阅读次数:
91
一个思路不难,但是实现起来有点毒瘤的题。 显然题目给出的是基环树(内向树)森林。 把每一个基环抠出来。 大力分类讨论: 1. 若 $a, b$ 不在一个联通量里,显然是 $ 1, 1$ 2. 若 $a, b$ 在同一颗子树内,他们聚合的点显然是最近公共祖先,因为如果再往上走,2的条件就不满足。 3. ...
1 """ 2 Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. 3 According to the definition of LCA on Wikipedia: ...
分类:
其他好文 时间:
2020-02-13 22:33:56
阅读次数:
67
给定一棵二叉搜索树的先序遍历序列,要求你找出任意两结点的最近公共祖先结点(简称 LCA)。 输入格式: 输入的第一行给出两个正整数:待查询的结点对数 M(≤ 1 000)和二叉搜索树中结点个数 N(≤ 10 000)。随后一行给出 N 个不同的整数,为二叉搜索树的先序遍历序列。最后 M 行,每行给出 ...
分类:
其他好文 时间:
2020-02-13 14:59:07
阅读次数:
185
二叉树 总结例题 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