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

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

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


示例1:

输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8
输出: 6
解释: 节点 2 和节点 8 的最近公共祖先是 6。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-search-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。———————————————
解题思路:使用二叉搜索树的性质,对于当前节点,其左子树的所有结点值都小于当前节点,其右子树的所有结点值都大于当前节点。

  1. 当p和q的值都小于当前节点时,遍历左子节点,可以递归调用函数;
  2. 当p和q的值都大于当前节点时,遍历右子节点,可以递归调用函数;
  3. 当当前节点值在p和q之间,则可以直接返回当前节点;

其Python代码如下:

# Definition for a binary tree node.
class TreeNode:def __init__(self, x):self.val = xself.left = Noneself.right = Noneclass Solution:def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':if not root:return Noneif p.val<root.val and q.val<root.val:return self.lowestCommonAncestor(root.left,p,q)elif p.val>root.val and q.val>root.val:return self.lowestCommonAncestor(root.right,p,q)else:return root

算法的时间复杂度为O(n),在最坏的情况下需要遍历所有节点,空间复杂度为O(1)。

leetcode —— 235. 二叉搜索树的最近公共祖先相关推荐

  1. leetcode 235. 二叉搜索树的最近公共祖先(Java版,树形dp套路)

    题目 原题地址:leetcode 235. 二叉搜索树的最近公共祖先 说明: 所有节点的值都是唯一的. p.q 为不同节点且均存在于给定的二叉搜索树中. 题解 关于 树形dp 套路,可以参考我的另一篇 ...

  2. Leetcode 235.二叉搜索树的最近公共祖先

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

  3. leetcode 235. 二叉搜索树的最近公共祖先

    给定一棵二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义: "对于有根树T的两个结点u.v,最近公共祖先表示一个结点x,满足x是u.v的祖先且x的深度尽可能 ...

  4. leetcode 235. 二叉搜索树的最近公共祖先 思考分析

    目录 题目 思考 迭代法 题目 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 ...

  5. LeetCode 235. 二叉搜索树的最近公共祖先(递归)

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

  6. ( “树” 之 BST) 235. 二叉搜索树的最近公共祖先 ——【Leetcode每日一题】

    二叉查找树(BST):根节点大于等于左子树所有节点,小于等于右子树所有节点. 二叉查找树中序遍历有序. 235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. ...

  7. 二叉树part8 | ● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点

    文章目录 235. 二叉搜索树的最近公共祖先 思路 代码 困难 701.二叉搜索树中的插入操作 思路 代码 450.删除二叉搜索树中的节点 思路 代码 困难 今日收获 235. 二叉搜索树的最近公共祖 ...

  8. 【C语言刷LeetCode】235. 二叉搜索树的最近公共祖先(E)

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

  9. 【Leetcode | 235】 235. 二叉搜索树的最近公共祖先

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

最新文章

  1. 虚拟机中那些可以作为root对象_java虚拟机面试题及答案整理
  2. c语言煎饼问题算法,C煎饼分类程序?
  3. 27. Spring Boot 部署与服务配置
  4. 例子:选择一个联系人
  5. CentOS环境Tomcat配置JDK的另一种方式
  6. 有哪些问题应该得到解决?
  7. java设置事务锁_事务与锁
  8. Tricks(四十六)—— 四个数中最小值的实现
  9. asp.net抓取网页html源代码失败 只因UserAgent作怪
  10. 2020年全球锂电池电芯产值将超过3400亿元
  11. win10命令行动态调整网卡优先级
  12. 瑞星木马防御专杀QQ,360,百度软件管家(见图为证!)
  13. 项目实战:Qt+OpenCV大家来找茬(Qt抓图,穿透应用,识别左右图区别,框选区别,微调位置)
  14. Android7(N)中webview导致应用内语言切换失效
  15. 74LVC1G3157GW
  16. 无线路由频繁掉线9大原因分析
  17. seo是什么意思(seo专员是什么职业?)
  18. go环境搭建开发工具安装配置
  19. emui11如何升级鸿蒙os教程,鸿蒙OS2.0系统怎么降级到EMUI11
  20. 什么是虚拟机?Mac电脑怎么使用虚拟机安装双系统?

热门文章

  1. 《洛克菲勒留给儿子的38封信》 第四封:现在就去做
  2. 面试官系统精讲Java源码及大厂真题 - 06 LinkedList 源码解析
  3. Docker-Compose快速搭建Oracle-11G系统
  4. SpringMVC 解决中文乱码的过滤器
  5. npm 下载 依赖包时出错的解决方式
  6. js designMode contentEditable 编辑在线网页
  7. Sturts2中action各项配置的默认值
  8. Linux入门学习(六)
  9. php 命令行打印换行符_如何在命令行输出中打印换行符
  10. 如何构建一个简单的语音识别应用程序