图解 | 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
思路分析
二叉搜索树的主要性质如下图: 根据题目描述,可以确定两个节点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的最近公共祖先返回。因此,该方法就是递归函数。
-End-
最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!
面试题
】即可获取
评论