题目描述: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉树: root = [ ...
分类:
其他好文 时间:
2020-05-01 12:29:53
阅读次数:
54
最近公共祖先,就是指两个节点在这棵树上深度最大的公共的祖先节点,也就是这两个点在这棵树上距离最近的公共祖先节点。 所以LCA主要是用来处理两个点之间唯一的那一条最短路径。 首先最容易想到的暴力做法: 给出节点u , v,,首先对u进行回溯一直到根节点,并对途中的节点加上标记。然后对v进行回溯,直到找 ...
分类:
其他好文 时间:
2020-04-22 10:14:29
阅读次数:
49
传送门:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/ 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示 ...
分类:
其他好文 时间:
2020-04-15 18:10:47
阅读次数:
71
Q:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉树: root =?[3,5,1,6,2 ...
分类:
其他好文 时间:
2020-04-14 15:16:03
阅读次数:
53
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), ...
分类:
其他好文 时间:
2020-04-12 18:30:30
阅读次数:
65
最近公共祖先问题与Tarjan离线算法 最近公共祖先问题 树上两点的最近公共祖先问题(LCA Least Common Ancestors) 对于有根树T的两个结点u、v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u和v的祖先且x的深度尽可能大。在这里,一个节点也可以是它自己的祖先。 ...
分类:
编程语言 时间:
2020-04-07 00:31:59
阅读次数:
103
一、题目说明 题目236. Lowest Common Ancestor of a Binary Tree,在一个二叉树中找两个节点的最近公共祖先。难度是Medium! 二、我的解答 这个用二叉树的递归遍历,稍加改造即可: 性能如下: 三、优化措施 其他方法,暂时想不起来。 ...
分类:
其他好文 时间:
2020-04-05 09:24:53
阅读次数:
61
[TOC] 浅谈 LCA $LCA$ 即 最近公共祖先,定义如下: 给定一颗有根树,若节点 $z$ 既是节点 $x$ 的祖先,又是节点 $y$ 的祖先,则称之为 $x,y$ 的公共祖先。 在节点 $x,y$ 所有的公共祖先中深度最大的即为最近公共祖先,记为 $LCA(x,y)$。 $LCA$ 的主要 ...
分类:
其他好文 时间:
2020-03-31 17:18:22
阅读次数:
60
算法步骤 时间复杂度 $O((n+q)\log n)$,$n$是问题规模,$q$是询问个数 倍增法求$LCA$ $fa[i,j]$表示从$i$开始向上走$2^j$所能到达的节点 $(0 \leq j\leq\log n)$ $depth[i]$表示节点$i$的深度 哨兵:如果从$i$开始跳$2^j$ ...
分类:
其他好文 时间:
2020-03-29 21:26:30
阅读次数:
76