图解 | LeetCode #235 二叉搜索树的最近公共祖先

共 1699字,需浏览 4分钟

 ·

2021-07-04 04:50




👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇








作者丨微木




来源丨编程狂想曲






你好,我是微木。


今天分享的内容是LeetCode中235.二叉搜索树的最近公共祖先 简单 这个题目。


题目描述:

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


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


示例:


输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8



输出: 6 



解释: 节点 2 和节点 8 的最近公共祖先是 6。

思路分析



二叉搜索树的主要性质如下图:





根据题目描述,可以确定两个节点p和q,一定在二叉搜索树中。那么,相比较于根节点root而言,这两个节点有如下几种情况:


1.p和q,一个在root的左子树,一个在root的右子树





对于这种情况,p和q的最近公共祖先就是根节点root


2.p和q,在root的左子树





对于这种情况,p和q的公共祖先,需要在左子树查找。就节点p=3和节点q=9来说,它们的最近公共祖先是节点6。


3.p和q,在root的右子树





对于这种情况,p和q的公共祖先需要在根节点root的右子树查找。就节点15和27而言,它们的最近公共祖先是节点20。


4.p和q,其中一个节点就是根节点





对于这种情况,根据公共祖先的定义,与根节点相同的节点就是它们的最近公共祖先。这里,节点p和节点q的最近公共祖先是根节点root,也是节点p。


根据上述四种情况的分析,总结来说就是:


当节点p和节点q都在左子树时,即都小于根节点root时,需要在root的左子树查找其最近公共祖先;




当节点p和节点q都在右子树时,即都大于根节点root时,需要在root的右子树查找其最近公共祖先;


当节点p和节点q一个在根节点root的左子树,一个在其右子树,或者其中一个节点和根节点相同时,root就是其最近公共祖先。


至此,根据二叉搜索树的天然递归属性,代码实现如下:




方法lowestCommonAncestor的用就是给定根节点root,然后找到节点p和q的最近公共祖先返回。因此,该方法就是递归函数。



那么,当需要在左子树或右子树中寻找节点p和节点q的最近公共祖先时,直接调用该方法就可以。

-End-



最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!










点击👆卡片,关注后回复【面试题】即可获取









在看点这里好文分享给更多人↓↓









浏览 30
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报