leetcode —— 235. 二叉搜索树的最近公共祖先
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。———————————————
解题思路:使用二叉搜索树的性质,对于当前节点,其左子树的所有结点值都小于当前节点,其右子树的所有结点值都大于当前节点。
- 当p和q的值都小于当前节点时,遍历左子节点,可以递归调用函数;
- 当p和q的值都大于当前节点时,遍历右子节点,可以递归调用函数;
- 当当前节点值在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. 二叉搜索树的最近公共祖先相关推荐
- leetcode 235. 二叉搜索树的最近公共祖先(Java版,树形dp套路)
题目 原题地址:leetcode 235. 二叉搜索树的最近公共祖先 说明: 所有节点的值都是唯一的. p.q 为不同节点且均存在于给定的二叉搜索树中. 题解 关于 树形dp 套路,可以参考我的另一篇 ...
- Leetcode 235.二叉搜索树的最近公共祖先
Time: 20190907 Type: Easy 题目描述 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p. ...
- leetcode 235. 二叉搜索树的最近公共祖先
给定一棵二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义: "对于有根树T的两个结点u.v,最近公共祖先表示一个结点x,满足x是u.v的祖先且x的深度尽可能 ...
- leetcode 235. 二叉搜索树的最近公共祖先 思考分析
目录 题目 思考 迭代法 题目 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 ...
- LeetCode 235. 二叉搜索树的最近公共祖先(递归)
题目描述 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x,满足 x 是 p ...
- ( “树” 之 BST) 235. 二叉搜索树的最近公共祖先 ——【Leetcode每日一题】
二叉查找树(BST):根节点大于等于左子树所有节点,小于等于右子树所有节点. 二叉查找树中序遍历有序. 235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. ...
- 二叉树part8 | ● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点
文章目录 235. 二叉搜索树的最近公共祖先 思路 代码 困难 701.二叉搜索树中的插入操作 思路 代码 450.删除二叉搜索树中的节点 思路 代码 困难 今日收获 235. 二叉搜索树的最近公共祖 ...
- 【C语言刷LeetCode】235. 二叉搜索树的最近公共祖先(E)
[ 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x,满足 x 是 p.q ...
- 【Leetcode | 235】 235. 二叉搜索树的最近公共祖先
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x,满足 x 是 p.q 的祖 ...
最新文章
- 虚拟机中那些可以作为root对象_java虚拟机面试题及答案整理
- c语言煎饼问题算法,C煎饼分类程序?
- 27. Spring Boot 部署与服务配置
- 例子:选择一个联系人
- CentOS环境Tomcat配置JDK的另一种方式
- 有哪些问题应该得到解决?
- java设置事务锁_事务与锁
- Tricks(四十六)—— 四个数中最小值的实现
- asp.net抓取网页html源代码失败 只因UserAgent作怪
- 2020年全球锂电池电芯产值将超过3400亿元
- win10命令行动态调整网卡优先级
- 瑞星木马防御专杀QQ,360,百度软件管家(见图为证!)
- 项目实战:Qt+OpenCV大家来找茬(Qt抓图,穿透应用,识别左右图区别,框选区别,微调位置)
- Android7(N)中webview导致应用内语言切换失效
- 74LVC1G3157GW
- 无线路由频繁掉线9大原因分析
- seo是什么意思(seo专员是什么职业?)
- go环境搭建开发工具安装配置
- emui11如何升级鸿蒙os教程,鸿蒙OS2.0系统怎么降级到EMUI11
- 什么是虚拟机?Mac电脑怎么使用虚拟机安装双系统?