题目

面试题68 - II. 二叉树的最近公共祖先

难度:简单

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 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], 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。因为根据定义最近公共祖先节点可以为节点本身。

说明:

  • 所有节点的值都是唯一的。
  • p、q 为不同节点且均存在于给定的二叉树中。

答案

思路:

  • 1、如果p和q分别是root的左右节点,那么root就是我们要找的最近公共祖先
  • 2、如果p和q都是root的左节点,那么返回lowestCommonAncestor(root->left, p, q)
  • 3、如果pheq都是root的右节点,那么返回lowestCommonAncestor(root->right, p, q)

边界条件讨论:

  • 1、如果是null表示已经找到最低了,返回null表示没找到
  • 2、如果root与p相等或者q相等,则返回root
  • 3、如果左子树没找到,递归函数返回null,证明p和q在root的右侧,那么最终的公共祖先就是右子树找到的结点
  • 4、如果右子树没找到,递归函数返回null,证明p和q在root的左侧,那么最终的公共祖先就是左子树找到的结点

代码:

TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if (root == NULL || root == p || root == q) return root;//分别检查左、右子树是否含有p或qTreeNode* leftTree = lowestCommonAncestor(root->left, p, q);TreeNode* rightTree = lowestCommonAncestor(root->right, p, q);if (leftTree == NULL) return rightTree;//左子树中没有,说明在右子树if (rightTree == NULL) return leftTree;//右子树中没有,说明在左子树//如果在root的左右子树中都找到了return root;
}

算法笔记_面试题_13.二叉树的最近公共祖先相关推荐

  1. 奇安信集团笔试题:二叉树的最近公共祖先(leetcode236),杀死进程(leetcode582)...

    1. 二叉树最近公共祖先 奇安信集团 2020校招 服务端开发-应用开发方向在线考试 编程题|20分2/2 寻祖问宗 时间限制:C/C++语言 1000MS:其他语言 3000MS 内存限制:C/C+ ...

  2. 【经典算法题】二叉树的最近公共祖先

    [经典算法题]二叉树的最近公共祖先 Leetcode 0235 二叉搜索树的最近公共祖先 题目描述:Leetcode 0235 二叉搜索树的最近公共祖先 分析 本题的考点:LCA(最近公共祖先). 关 ...

  3. 代码随想录算法训练营第22天 二叉树 java :235. 二叉树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

    文章目录 LeetCode 236. 二叉树的最近公共祖先 题目讲解 思路 LeetCode 701.二叉搜索树中的插入操作 题目讲解 思路 LeetCode 450.删除二叉搜索树中的节点 题目讲解 ...

  4. leetcode 236. 二叉树的最近公共祖先 递归解法 c语言

    如题: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先.百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x, 满足 x 是 p.q ...

  5. LeetCode二叉树系列——236.二叉树的最近公共祖先

    一.题目描述: 236. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p.q,最近公共祖先表 ...

  6. 二叉树题目----6 二叉树的最近公共祖先 AND 二叉树搜索树转换成排序双向链表

    二叉树的最近公共祖先 思路 在左.右子树中分别查找是否包含p或q: 如果以下两种情况(左子树包含p,右子树包含q/左子树包含q,右子树包含p),那么此时的根节点就是最近公共祖先 如果左子树包含p和q, ...

  7. LeetCode 1676. 二叉树的最近公共祖先 IV

    文章目录 1. 题目 2. 解题 1. 题目 给定一棵二叉树的根节点 root 和 TreeNode 类对象的数组(列表) nodes,返回 nodes 中所有节点的最近公共祖先(LCA). 数组(列 ...

  8. 最近公共祖先_leetcode No.236 二叉树的最近公共祖先

    承接二叉搜索树的最近公共祖先. 题目链接: 二叉树的最近公共祖先 - 力扣(LeetCode)​leetcode-cn.com 题目描述: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百 ...

  9. 【LeetCode】【HOT】236. 二叉树的最近公共祖先(递归)

    [LeetCode][HOT]236. 二叉树的最近公共祖先 文章目录 [LeetCode][HOT]236. 二叉树的最近公共祖先 package hot;class TreeNode{int va ...

  10. 【LeetCode】剑指 Offer 68 - II. 二叉树的最近公共祖先

    [LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 文章目录 [LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 一.DFS 一.DFS 祖先的定义 ...

最新文章

  1. 使用模块化编译缩小 apk 体积
  2. 安装Linux显示内部错误,Ubuntu14.04安装XRDP远程连接及显示内部错误解决方案
  3. 狗蛋(驱动小白)和老王(硬件老司机)关于硬件那点事儿的一次密谈
  4. 支付宝瓜分9亿,20倍大概能分到多少钱?
  5. 重新加一个window_Activity、View、Window关系,进程间通信,责任链模式,Https,数据存储...
  6. VS2019 禁止Web项目停止调试后自动关闭浏览器(在浏览器窗口关闭时停止调试程序,在调试停止时关闭浏览器)
  7. mysql sqlite转换_数据库转换工具(SqliteToMysql)
  8. 使用多线程拷贝文件夹
  9. 一文了解阿里云CDN HTTP2.0
  10. 通过iLO进行Zabbix监控——针对HP服务器集成
  11. 获取综合教务系统(URP)的数据包
  12. 带你十分钟做出一个自己的手机APP
  13. 【不想读paper的时候看看】阅读文献?
  14. iOS APP上线流程规范
  15. py2neo的neo4j数据库增删改查节点node、关系relationship、属性property操作
  16. 链表中的LinkList L、LinkList *L
  17. android+360+手表,360智能手表
  18. 【EM(electron migration)】
  19. Ps 初学者教程「27」如何使用色阶功能提高照片的对比度和亮度?
  20. Android平台上最好的几款免费的代码编辑器(转载)

热门文章

  1. 非要自己开发一个测试工具不可
  2. [2019杭电多校第一场][hdu6578]Blank(dp)
  3. 4~20mA变送器量程与输入电流、输出电流的关系
  4. spring-boot配置文件中server.context-path不起作用
  5. [what is machine learning?]
  6. zzbower入门教程
  7. 登录验证和EasyUI的初识
  8. phpmyadmin安装出错,缺少 mysqli 扩展。请检查 PHP 配置
  9. JQuery简要介绍(转)
  10. vue 跨域请求js添加代码