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

百度百科中最近公共祖先的定义: “对于有根树T的两个结点u、v,最近公共祖先表示一个结点x,满足x是u、v的祖先且x的深度尽可能大。”(一个节点也可以是它自己的祖先

例如,给定如下二叉搜索树:  root = [6,2,8,0,4,7,9,null,null,3,5]

        _______3______/              \___5__          ___1__/      \        /      \6      _2       0       8/  \7   4

示例 1:

输入: root, p = 5, q = 1
输出: 3
解释: 节点 5 和节点 1 的最近公共祖先是节点 3

示例 2:

输入: root, p = 5, q = 4
输出: 5
解释: 节点 5 和节点 4 的最近公共祖先是节点 5因为根据定义最近公共祖先节点可以为指定节点自身。

解题思路:

递归搜索左右子树,如果左子树和右子树都不为空,说明最近父节点一定在根节点。

反之,如果左子树为空,说明两个节点一定在右子树;

同理如果右子树为空,说明两个节点一定在左子树。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if(root==NULL) return root;if(root==p||root==q) return root;TreeNode *left=lowestCommonAncestor(root->left,p,q);TreeNode *right=lowestCommonAncestor(root->right,p,q);if(left!=NULL&&right!=NULL) return root;//如果p,q刚好在左右两个子树上if(left==NULL) return right;//仅在右子树if(right==NULL) return left;//仅在左子树}
};

leetcode236. 二叉树的最近公共祖先相关推荐

  1. leetcode236 二叉树的最近公共祖先

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

  2. Leetcode--236. 二叉树的最近公共祖先(Java)

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

  3. 43-二叉树练习-LeetCode236二叉树的最近公共祖先

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

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

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

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

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

最新文章

  1. vs2015编译 pybind 动态库
  2. MF RC522读卡芯片手册
  3. c++ 哪些自定义的数据类型
  4. django 链接多个数据库 并使用原生sql
  5. html filter 在线预览,HTML Filter
  6. Vant 1.0 发布:轻量、可靠的移动端 Vue 组件库
  7. bash 函数内部变量_使用源命令将函数和变量导入Bash
  8. bzoj2425 [HAOI2010]计数 组合数
  9. stm32端口复用和重映射
  10. 利用common-fileupload组件实现java上传下载
  11. vs2015 hiredis编译使用
  12. 轮式联合收割机液压系统设计
  13. JavaScript --------WebS APIs学习之本地存储
  14. 冒泡排序及其优化(三种优化)
  15. win10系统预加载服务器,等等, 你的win10关闭了这几个服务, 会流畅许多
  16. Python 批量转换视频音频采样率(附代码) | Python工具
  17. linux 清除dns缓存
  18. ABeam (德硕)News | 喜提「SAP BTP 最佳实施合作伙伴」奖项
  19. 【大数据入门核心技术-Spark】(二)Spark核心模块
  20. 赵小楼《天道》《遥远的救世主》深度解析(76)人性的本来是喜欢享受、安逸、舒适的,不舒服的你能接受吗?

热门文章

  1. 一阶低通滤波器方程_一阶低通滤波器_一阶低通滤波器公式_一阶低通滤波器原理...
  2. 商业逻辑认知:华为为何不倒?微软为何重生?瑞幸能干掉星巴克吗?
  3. 华尔街日报图表_阅读《华尔街日报》文章而无需花一分钱(合法)
  4. Linux - 命令(一)
  5. android双导航功能吗,Android导航栏隐藏与浮现(二)
  6. BZOJ_2594_[Wc2006]水管局长数据加强版_LCT
  7. vue 使用canvas弄个星空当背景
  8. 图论——AOV网络及拓扑排序
  9. 在PTA习题集中快速查找自己的历史提交记录
  10. vscode神级插件