首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

二叉树的最低公共祖先--递归解

二叉树的最低公共祖先是指在给定的二叉树中,找到两个指定节点的最低公共祖先节点。递归解是一种常用的解决方法,可以通过递归地遍历二叉树来找到最低公共祖先。

递归解的思路如下:

  1. 如果当前节点为null或者等于其中一个目标节点,则返回当前节点。
  2. 在左子树中递归查找两个目标节点,返回值分别记为left。
  3. 在右子树中递归查找两个目标节点,返回值分别记为right。
  4. 如果left为null,则说明两个目标节点都不在左子树中,最低公共祖先节点在右子树中,返回right。
  5. 如果right为null,则说明两个目标节点都不在右子树中,最低公共祖先节点在左子树中,返回left。
  6. 如果left和right都不为null,则说明两个目标节点分别位于左右子树中,最低公共祖先节点为当前节点,返回当前节点。

递归解的时间复杂度是O(n),其中n是二叉树中节点的个数。这是因为每个节点最多遍历一次。

在腾讯云中,推荐使用COS(腾讯云对象存储)来存储和管理二叉树相关的数据。COS是一种安全、低成本、高可靠的云存储服务,适用于各种场景,包括数据备份、图片视频分享、企业网站数据存储等。

更多关于腾讯云COS的信息和产品介绍,您可以访问以下链接: https://cloud.tencent.com/product/cos

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

算法:二叉树中两个节点的最低公共祖先(LCA)

思路要找到一个二叉树中两个节点的最低公共祖先(Lowest Common Ancestor, LCA),需要考虑以下几点:定义LCA:对于节点 A 和 B,它们的LCA是指在二叉树中同时作为 A 和 B...的祖先的最低节点。...Go实现示例下面是用 Go 实现二叉树中两个节点的最低公共祖先(LCA)可以采用递归的方法,这里假设已经定义了二叉树节点的结构体:package mainimport "fmt"type TreeNode...在 main 函数中,构造了一个二叉树,并找到了节点 5 和节点 1 的最低公共祖先。...在最坏情况下,递归调用的空间复杂度为 O(n)。因此,整体来说,通过递归遍历二叉树来寻找两个节点的最低公共祖先的时间复杂度是 O(n),这保证了算法在合理的时间范围内解决问题,适用于一般大小的二叉树。

22610
  • 二叉树的最近公共祖先

    二叉树的最近公共祖先 力扣链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先...思路 遇到这个题目首先想的是要是能自底向上查找就好了,这样就可以找到公共祖先了。 那么二叉树如何可以自底向上查找呢? 回溯啊,二叉树回溯的过程就是从低到上。...直观上来看,找到最近公共祖先,直接一路返回就可以了。 如图: 236.二叉树的最近公共祖先 就像图中一样直接返回7,多美滋滋。...如图: 236.二叉树的最近公共祖先1 图中节点10的左子树返回null,右子树返回目标值7,那么此时节点10的处理逻辑就是把右子树的返回值(最近公共祖先7)返回上去!...,完整流程图如下: 236.二叉树的最近公共祖先2 从图中,大家可以看到,我们是如何回溯遍历整颗二叉树,将结果返回给头结点的!

    2.6K20

    二叉树-最近的公共祖先

    已知二叉树,求二叉树中给定的两个节点的最近公共祖先。 最近公共祖先: 两节点v与w的最近公共祖先u,满足在树上最低(离根最 远),且v,w两个节点都是u的子孙。 LeetCode 236....Lowest Common Ancestor of a Binary Tree 思考与分析 1.两个节点的公共祖先一定在从根节点,至这两个节点的路径上。...2.由于求公共祖先中的最近公共祖先,那么即同时出现在这两条路 径上的离根节点最远的节点(或离两个最近)。 3.最终算法即:求p节点路径,q节点路径,两路径上最后一个相同 的节点。 ?...2.同时遍历p节点的路径与q节点的路径,遍历n个节点,最后一个相同节点,即最近 公共祖先。...if(node_p_path[i] = node_q_path[i]){ result = node_p_path[i]; }//最后相同的节点为最近公共节点

    73420

    二叉树的最近公共祖先

    个人主页: :✨✨✨初阶牛✨✨✨ 强烈推荐优质专栏: C++的世界(持续更新中) 推荐专栏1: C语言初阶 推荐专栏2: C语言进阶 个人信条: 知行合一 本篇简介:>:记录力扣题 二叉树的最近公共祖先...✨ 题目介绍: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。...百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”...正经解题: 试着观察最近公共祖先,如果只是普通的祖先,则这两个结点都在其中的一个子树中....(1)全在该结点的左子树 (2)全在该结点的右子树 如果是最近的公共祖先,则一个结点在左子树,一个在右子树. (1) 如果全在左子树,则往左子树方向继续找.

    22310

    LeetCode 236:二叉树的最近公共祖先

    这是无量测试之道的第216篇原创 特别说明: 输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4 输出:5 解释:节点 5 和节点 4 的最近公共祖先是节点...因为根据定义最近公共祖先节点可以为节点本身。 ---- 解题思路:   一般二叉树相关的算法题,都可以使用递归这个编程技巧来解题,本题也不例外。...先从左子树上找共同的祖先,记为left    2....如果left为nil,则说明要么2个节点都在右子树上,或者至少有一个不在这个二叉树上。 关于递归:    递归这种编程技巧是非常有用的,掌握它,可以为我们解决很多思考起来很麻烦的题目。...后续为了让大家体会到递归编程技巧的强大,我又借二叉树的遍历例子用递归来实现为大家展示递归的强大。大家如果想更好的理解递归的调用栈的话,可以看我自己写的文章:leetcode 递归编程技巧-链表算法题。

    30710

    LeetCode 二叉树的最近公共祖先(二叉树)

    题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。...百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”...= 5, q = 1 输出: 3 解释: 节点 5 和节点 1 的最近公共祖先是节点 3。...因为根据定义最近公共祖先节点可以为节点本身。 说明: 所有节点的值都是唯一的。 p、q 为不同节点且均存在于给定的二叉树中。...思路 递归自底向上遍历每个节点: 如果此节点为空返回空; 如果此节点为p或q返回该节点; 如果该节点的左孩子或右孩子为p或q,返回该节点的左子树或右子树; 如果该节点左子树为p右子树为q则该节点为最近公共祖先

    20010

    【LeetCode 236.二叉树的最近公共祖先】双解法:递归实现 + 利用父指针

    题目描述:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 解法 1: 递归实现(推荐) 这题相较于 LeetCode 235.二叉搜索树的最近公共祖先 的递归思考起来比较有难度。...封装一个 recurseTree 递归函数,它返回 true/false,代表当前二叉树中是否存在 p、或者存在 q、或者两个节点都存在。...在 recurseTree 递归过程中,如果发现当前二叉树同时存在 p 和 q,那么就更新最近公共祖先。...那么对 node 来说,它的所有祖先节点就是从 node 开始,一直向上遍历父亲节点,统计过程中所有经历的节点,这些节点组成的集合就是所有祖先节点。...整体思路如下: 遍历二叉树,直到 p 和 q 都被遍历完 统计 p 的所有祖先节点,放入集合 set 中 从 q 开始,不断向上访问祖先节点,每次都检查节点是否在集合 set 中 代码实现如下: //

    31640

    Day19-二叉树-最近公共祖先

    Q:已知一个二叉树,给定两个节点,求这两个节点的最近公共祖先 举例:网上找一张图 ?...5,0的最近公共祖先,就是3,根节点 5,4的最近公共祖先,就是5 7,4的最近公共祖先,就是2 三 冷静分析 其实有了昨天的题,是做了很好的铺垫的。...逻辑比较简单,我直接说了啊 1.首先我们需要知道,两个节点的公共祖先,一定在,从根节点到这两个节点的路径上。...举例: 节点7的路径:3 -> 5 -> 2 -> 7 节点4的路径:3 -> 5 -> 2 -> 4 长度一样,同时遍历两个路径,当发现最后的相同的节点,即2,就是最近公共祖先了 四 完整代码及注释...root || finish){//用finish来标识是否找到了待搜索节点,以免不必要的递归 return; } path.push_back(root);

    89110

    【LeetCode100】--- 二叉树的最近公共祖先

    接着不过是去 当前节点的左边,当前节点的右边。去寻找 p 和 q 最近公共祖先的返回情况分三种 第一种 ① p 或 q 就是当前节点root。...直接返回 root 当前节点root == null 或者 root == p 或者 root == q 此时二叉树的最近公共祖先就是root 第二种: ② p 和 q都在当前节点的左边,那就递归去左边找...第三种: ③ p 和 q都在当前节点的右边。那就递归去右边找。 第四种: ④ p 和 q 在当前节点的两边,那么当前节点就是最近公共祖先。...rightTree : leftTree; } } 方法二:相交链表(利用相交链表思想,利用栈求最近公共祖先) 算法原理 我们通过递归找出从根到目标节点的路径,使用栈存储这些路径。...通过对比这两条路径,找到它们的第一个共同节点,这个节点就是最低公共祖先。 这是一种 路径追踪 的方法,适用于寻找树中两个节点的最低公共祖先。

    7510

    二叉树的最近公共祖先

    题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。...百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”...二叉搜索树的最近公共祖先 《剑指Offer》同题:面试题68 - II. 二叉树的最近公共祖先 《程序员面试金典》同题:面试题 04.08. 首个共同祖先 2....解题 如果左右子树都找到了,就返回root 如果只有一边找到就返回非空的那边 如果都没有找到就返回NULL 递归查找 ?...NULL;//返回NULL if(left && right)//左右都找到了p,q,root就是答案 return root; else//一遍找到了p,q,返回找到的那边

    44030

    二叉树的最近公共祖先

    二叉树的最近公共祖先题解集合 DFS BFS 总结 ---- DFS 对于二叉树中某两个节点的最近公共祖先,存在两种情况: 1.分别位于两个不同的子树中 首先,我们知道递归处理的是规模不同...,问题相同的事情,这里情况1中 规模不同是处理的每颗二叉树的大小不同, 问题相同指的是都是找当前二叉树的左右子树的根节点为最近的公共祖先 2.位于同一颗子树中 同上可知,这里处理的也是规模不同,...问题相同的事情 既然都是规模不同,问题相同,那就可以用递归解决 那么用递归解决的思路是什么呢?...当前节点即为最近公共祖先; 如果左右子树其中一个不为空,则返回非空节点,此时返回的非空节点就是最近工作祖先,如果左右子树其中一个为空,则表示当前子树中不存在p和q节点 这里对上面的思路进行画图解释一波:...二叉树的最近公共祖先一模一样的原题

    23910

    LeetCode-236-二叉树的最近公共祖先

    # LeetCode-236-二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。...百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”...5, q = 1 输出: 3 解释: 节点 5 和节点 1 的最近公共祖先是节点 3。...因为根据定义最近公共祖先节点可以为节点本身。 说明: 所有节点的值都是唯一的。 p、q 为不同节点且均存在于给定的二叉树中。...= null) { return root;//如果左右都存在,就说明pq都出现了,这就是,公共祖先,此时不用考虑公共祖先是自己的情况,因为上面已经做过判断了。

    25220

    二叉树的最近公共祖先 II

    题目 给定一棵二叉树的根节点 root,返回给定节点 p 和 q 的最近公共祖先(LCA)节点。 如果 p 或 q 之一不存在于该二叉树中,返回 null。 树中的每个节点值都是互不相同的。...根据维基百科中对最近公共祖先节点的定义:“两个节点 p 和 q 在二叉树 T 中的最近公共祖先节点是后代节点中既包括 p 又包括 q 的最深节点(我们允许一个节点为自身的一个后代节点)”。...示例 1: 输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1 输出: 3 解释: 节点 5 和 1 的共同祖先节点是 3。...示例 2: 输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4 输出: 5 解释: 节点 5 和 4 的共同祖先节点是 5。...根据共同祖先节点的定义,一个节点可以是自身的后代节点。

    41450

    二叉树的最近公共祖先 IV

    题目 给定一棵二叉树的根节点 root 和 TreeNode 类对象的数组(列表) nodes,返回 nodes 中所有节点的最近公共祖先(LCA)。...数组(列表)中所有节点都存在于该二叉树中,且二叉树中所有节点的值都是互不相同的。...我们扩展二叉树的最近公共祖先节点在维基百科上的定义:“对于任意合理的 i 值, n 个节点 p1 、 p2、…、 pn 在二叉树 T 中的最近公共祖先节点是后代中包含所有节点 pi 的最深节点(我们允许一个节点是其自身的后代...示例 1: 输入: root = [3,5,1,6,2,0,8,null,null,7,4], nodes = [4,7] 输出: 2 解释: 节点 4 和 7 的最近公共祖先是 2。...示例 2: 输入: root = [3,5,1,6,2,0,8,null,null,7,4], nodes = [1] 输出: 1 解释: 单个节点的最近公共祖先是该节点本身。

    40550
    领券