算法笔记_面试题_13.二叉树的最近公共祖先
题目
面试题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.二叉树的最近公共祖先相关推荐
- 奇安信集团笔试题:二叉树的最近公共祖先(leetcode236),杀死进程(leetcode582)...
1. 二叉树最近公共祖先 奇安信集团 2020校招 服务端开发-应用开发方向在线考试 编程题|20分2/2 寻祖问宗 时间限制:C/C++语言 1000MS:其他语言 3000MS 内存限制:C/C+ ...
- 【经典算法题】二叉树的最近公共祖先
[经典算法题]二叉树的最近公共祖先 Leetcode 0235 二叉搜索树的最近公共祖先 题目描述:Leetcode 0235 二叉搜索树的最近公共祖先 分析 本题的考点:LCA(最近公共祖先). 关 ...
- 代码随想录算法训练营第22天 二叉树 java :235. 二叉树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点
文章目录 LeetCode 236. 二叉树的最近公共祖先 题目讲解 思路 LeetCode 701.二叉搜索树中的插入操作 题目讲解 思路 LeetCode 450.删除二叉搜索树中的节点 题目讲解 ...
- leetcode 236. 二叉树的最近公共祖先 递归解法 c语言
如题: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先.百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x, 满足 x 是 p.q ...
- LeetCode二叉树系列——236.二叉树的最近公共祖先
一.题目描述: 236. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p.q,最近公共祖先表 ...
- 二叉树题目----6 二叉树的最近公共祖先 AND 二叉树搜索树转换成排序双向链表
二叉树的最近公共祖先 思路 在左.右子树中分别查找是否包含p或q: 如果以下两种情况(左子树包含p,右子树包含q/左子树包含q,右子树包含p),那么此时的根节点就是最近公共祖先 如果左子树包含p和q, ...
- LeetCode 1676. 二叉树的最近公共祖先 IV
文章目录 1. 题目 2. 解题 1. 题目 给定一棵二叉树的根节点 root 和 TreeNode 类对象的数组(列表) nodes,返回 nodes 中所有节点的最近公共祖先(LCA). 数组(列 ...
- 最近公共祖先_leetcode No.236 二叉树的最近公共祖先
承接二叉搜索树的最近公共祖先. 题目链接: 二叉树的最近公共祖先 - 力扣(LeetCode)leetcode-cn.com 题目描述: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百 ...
- 【LeetCode】【HOT】236. 二叉树的最近公共祖先(递归)
[LeetCode][HOT]236. 二叉树的最近公共祖先 文章目录 [LeetCode][HOT]236. 二叉树的最近公共祖先 package hot;class TreeNode{int va ...
- 【LeetCode】剑指 Offer 68 - II. 二叉树的最近公共祖先
[LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 文章目录 [LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 一.DFS 一.DFS 祖先的定义 ...
最新文章
- 使用模块化编译缩小 apk 体积
- 安装Linux显示内部错误,Ubuntu14.04安装XRDP远程连接及显示内部错误解决方案
- 狗蛋(驱动小白)和老王(硬件老司机)关于硬件那点事儿的一次密谈
- 支付宝瓜分9亿,20倍大概能分到多少钱?
- 重新加一个window_Activity、View、Window关系,进程间通信,责任链模式,Https,数据存储...
- VS2019 禁止Web项目停止调试后自动关闭浏览器(在浏览器窗口关闭时停止调试程序,在调试停止时关闭浏览器)
- mysql sqlite转换_数据库转换工具(SqliteToMysql)
- 使用多线程拷贝文件夹
- 一文了解阿里云CDN HTTP2.0
- 通过iLO进行Zabbix监控——针对HP服务器集成
- 获取综合教务系统(URP)的数据包
- 带你十分钟做出一个自己的手机APP
- 【不想读paper的时候看看】阅读文献?
- iOS APP上线流程规范
- py2neo的neo4j数据库增删改查节点node、关系relationship、属性property操作
- 链表中的LinkList L、LinkList *L
- android+360+手表,360智能手表
- 【EM(electron migration)】
- Ps 初学者教程「27」如何使用色阶功能提高照片的对比度和亮度?
- Android平台上最好的几款免费的代码编辑器(转载)