LCA查找最近公共祖先

算法实验五:图论——桥,从零开始带你读懂各种找桥算法思路(基准法,并查集法,并查集+LCA环边法) 算法实验的全过程记录,只为提供最清晰的算法思路解析 阅读详情

参考大佬的思路

//AC code
/*
  1:根据中序,先序建树 
  2: 用 findnode( )查看待查询节点是否存在
  3:若待查询节点是存在,用 LCA( )查找最近公共祖先 
 其中LCA有三种: 
    u,v都在左子树或右子树,或者u,v分别在左子树和右子树,
 因此可采取如下步骤:
    (1)::判断当前遍历的节点是否为空,为空返回null,
    (2)::节点数据域是否等于u,是否等于p,是的话返回当前节点。
    (3)::之后判断left 和right是否为空, 若都不为空 ,则当前root为祖先指针,
        若其中一个为空,则返回另一边,为答案。
  4:格式输出 
*/ 
 

node *LCA(node *root, int u, int v) { //查找两节点最近祖先 
        if (root == NULL) return NULL;
        if (root->data== u || root->data== v) return root;
        node *left =LCA(root->lchild,u,v);
        node *right = LCA(root->rchild,u,v);
        if (left && right ) return root; //u,v分别位于左右子树的情况
        return left == NULL ? right : left;
}
--------------------- 
作者:菜多多 
来源:CSDN 
原文:https://blog.csdn.net/qq_41317652/article/details/82557975 
版权声明:本文为博主原创文章,转载请附上博文链接!

https://blog.csdn.net/qq_41317652/article/details/82557975

 

【数据结构与算法】图的遍历及连通性、在家谱中查找关系远近(LCA最近公共祖先)   本周数据结构与算法实验共3个题目,这三个题目难度适中,其中有一个是最小生成树,后面有时间专门写一下这个。所以就先写两个。   第一题考察邻接矩阵的使用以及连通分量的查找,第二题是二叉树和最近公共祖先(LCA)的应用 1. 图的遍历及连通性 【问题描述】 根据输入的图的邻接矩阵A,判断此图的连通分量的个数。 【输入形式】 第一行为图的结点个数n,之后的n行为邻接矩阵的内容,每行n个数表示。其中A[i][j]=1表示两个结点邻接,而A[i][j]=0表示两个结点无邻接关系。 【输出形式】 输出此 阅读详情

相关推荐

69、SAP数据库归档重做日志备份策略与工具详解

本文详细解析了SAP数据库归档重做日志备份的重要性及策略,介绍了SAP提供的备份工具brarchive及其配置和使用方法,探讨了BRBACKUP与BRARCHIVE的联合运行、一致在线备份、备用数据库备份场景以及备份策略的综合应用与优化。此外,还分析了备份过程中常见问题的解决方法、备份监控与评估流程、与第三方备份解决方案的集成方式,以及未来备份技术的发展趋势和应对策略。通过合理运用这些策略和工具,可以有效保障SAP数据库的安全性和可恢复性。

peace的博客 111

二叉树的最近公共祖先

二叉树的最近公共祖先

m0_73740682的博客 1113

深入Kafka:从SASL_PLAINTEXT到SASL_SSL的迁移之旅

本文详细介绍了如何将Apache Kafka从SASL_PLAINTEXT模式迁移到更安全的SASL_SSL模式。内容包括创建密钥库和信任库、生成证书签名请求、设置证书颁发机构、签署CSR以及修改Kafka配置文件的完整步骤。针对常见问题如SSL握手失败和循环连接尝试提供了解决方案。通过实施这些步骤,可以确保Kafka数据传输的安全性,实现客户端身份验证和加密传输。文章强调在操作过程中需仔细检查配置文件和证书信息,以确保迁移顺利完成。

m0_74337424的博客 72

二叉搜索树的最近公共祖先

因为是有序树,所有 如果 中间节点是 q 和 p 的公共祖先,那么 中节点的数组 一定是在 [p, q]区间的。如图,我们从根节点搜索,第一次遇到 cur节点是数值在[p, q]区间中,即 节点5,此时可以说明 p 和 q 一定分别存在于 节点 5的左子树,和右子树中。在搜索二叉树的公共祖先时,利用回溯从底向上搜索,遇到一个节点的左子树里有p,右子树里有q,那么当前节点就是最近公共祖先。所以当我们从上向下去递归遍历,第一次遇到 cur节点是数值在[p, q]区间中,那么cur就是 p和q的最近公共祖先

Learner_QUN的博客 597

【C++】面试101,二叉搜索树的最近公共祖先,在二叉树中找到两个节点的最近公共祖先,序列化二叉树,重建二叉树,输出二叉树的右视图,组队竞赛,删除公共字符

【C++】面试101,二叉搜索树的最近公共祖先,在二叉树中找到两个节点的最近公共祖先,序列化二叉树,重建二叉树,输出二叉树的右视图,组队竞赛,删除公共字符

weixin_71138261的博客 687

最近公共祖先(三种方法)

向上标记法 倍增法 tarjan算法

w75779的博客 1971

LCA 查找最近公共祖先

【代码】LCA 查找最近公共祖先

2401_87239144的博客 180

最近公共祖先 python_查找最近公共祖先(LCA)

一、问题求有根树的任意两个节点的最近公共祖先(一般来说都是指二叉树)。最近公共祖先简称LCA(Lowest Common Ancestor)。例如,如下图一棵普通的二叉树。结点3和结点4的最近公共祖先是结点2,即LCA(3,4)=2 。在此,需要注意到当两个结点在同一棵子树上的情况,如结点3和结点2的最近公共祖先为2,即 LCA(3,2)=2。同理:LCA(5,6)=4,LCA(6,10)=1。明...

weixin_39706127的博客 547

查找最近公共祖先(LCA)

一、问题   求有根树的任意两个节点的最近公共祖先(一般来说都是指二叉树)。最近公共祖先简称LCA(Lowest Common Ancestor)。例如,如下图一棵普通的二叉树。        结点3和结点4的最近公共祖先是结点2,即LCA(3,4)=2 。在此,需要注意到当两个结点在同一棵子树上的情况,如结点3和结点2的最近公共祖先为2,即 LCA(3,2)=2。同理:LCA(5,6)=4...

weixin_30533797的博客 256

二叉查找树(6) - 最近公共祖先LCA

二叉查找树(6) - 最近公共祖先LCA

3707

LCA最近公共祖先

LCA(Least Common Ancestors),即最近公共祖先,是指在有根树中,找出某两个结点u和v最近公共祖先。 ———来自百度百科 如: LCA(4,6)=4 LCA(10,11)=9 LCA(3,11)=1 暴力 求两个点的公共祖先,必定在有根树下进行, ...

yhhy666的博客 456

LCA 最近公共祖先

参考:https://www.cnblogs.com/JVxie/p/4854719.html 首先是最近公共祖先的概念(什么是最近公共祖先?): Tarjan/DFS+ST/倍增     在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大的公共祖先节点。     换句话说,就是两个点在这棵树上距离最近公共祖先节点。     ...

森宝的博客 474

How far away ?(树上倍增查找最近公共祖先(lca))

题目链接 前言:在边看题解边wa了近20发后的状态,唉,,,感觉灵魂出窍了 题意:给你一颗由n个点组成的树,再询问m次,每次两个点,问树上两点间的距离。 思路:先将无根树转化为有根树,若两点为a,b,则树上两点的距离就为dist[a]+dist[b]-2*dist[lca(a,b)],其中dist为该节点到根节点的距离。 树上倍增:(明天补) ac代码: #include <iostream> #include <algorithm> #include <cstdio>

chineseherofeng的博客 319

1 数据结构类-最近公共祖先LCA问题

1.淘宝面试题:有一个一亿节点的树,现在已知两个点,找这两个点的共同的祖先。 这个题怎么做呢? 本题为一道开放性试题,所以可以随意一些。下文的第二道题目则不行。 本题类型 实现特定的数据结构的一些另外要求的功能。 方法1:修改原本数据结构的内部结构。 给出的较为简单的方法:可以考虑的方案是稍微改一下树的存储结构: 1 每个结点存储一个父节点指针和在父节点中的

路漫漫其修远 603

二叉树的公共祖先

本文首先会介绍什么是最近公共祖先,接着将会针对该问题介绍几种求解方法,也是本文的核心内容。

weixin_54383080的博客 2683

每日一练:LeeCode-236、二叉树的最近公共祖先【二叉树+DFS+从下往上】

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

小孔靠得住的博客 1320

寻找最近公共祖先问题总结

递归,然后每次先进行左右子节点的递归,用一个found字段来标志是否找到了祖先结点,判断当前结点的左右子树结点是否含有所求的p、q结点,有就将当前root结点存储,并将found设为true后续不在进行ancestor结点的更新,或者当前root结点为所求结点的p或q的其中一个,并且当前root结点还含有所求的另一个p或q结点,这时也可以将found设为true。如果左右都为空就返回null,如果有一个不为空,就返回当前左右不为空的返回值,如果都不为空,就返回当前root。

qq_52465271的博客 360

最近公共祖先问题

最近公共祖先的倍增法、Tarjan算法等等

m0_62652820的博客 1293

最近公共祖先LCA算法

我是菜鸟ACMer(qwq),之前学图论板块的LCA算法做的一些笔记,适合小白,分享出来希望能帮助大家!

lwltql的博客 2513

最近公共祖先LCA)算法总结

:在有根树中距离两个节点最近公共祖先。:从当前节点到树根路径上的所有节点。u和v的公共祖先指 一个节点既是 u的祖先,又是 v的祖先

2302_81123100的博客 1597

VISIO图库包括海康威视VISIO图标库设备VSS格式VISIO图标库.zip

VISIO图库包括海康威视VISIO图标库设备VSS格式VISIO图标库.zip

上一篇: 1151 LCA in a Binary Tree (30 分)
下一篇: 7.Reverse Integer
石前有座桥
博客等级 码龄10年 46粉丝 387原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值