235. 二叉搜索树的最近公共祖先
LeetCode题目要求
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]
![图](/i/l/?n=23&i=blog/458364/202301/458364-20230125201445584-850114831.png)
示例
输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8
输出: 6
解释: 节点 2 和节点 8 的最近公共祖先是 6。
解题思路
利用二叉树的特性,根据 p q 两个节点值来确定在左子树还是右子树。但无论如何他们的最近公共祖先再试 p q 之间的。
通过递归及二叉搜索树的特点,来判断 p q 位置,如果同时小于当前节点值,那么在左子树递归,如果同时大于当前节点值,那么在右子树递归。
上代码
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
// 二叉搜索树的特性。确定 p q 的位置,在左侧 还是在 右侧
// 确定终止条件
if (root == null) {
return null;
}
// 如果 p q 在左子树,
if (root.val > p.val && root.val > q.val) {
return lowestCommonAncestor(root.left, p, q);
}
// 如果 p q 在右子树
if (root.val < p.val && root.val < q.val) {
return lowestCommonAncestor(root.right, p, q);
}
return root;
}
}
重难点
附:学习资料链接
标签:节点,22,val,祖先,二叉,235,null,root,Day From: https://www.cnblogs.com/blacksonny/p/17067277.html