当前位置: 首页剑指offer刷题第七期问题详情 【二叉树专题】剑指 Offer 68 – I. 二叉搜索树的最近公共祖先 本问题对应课程链接:剑指offer刷题第七期 要求: 1、请打卡你的解题代码,如果能简单说一下思路则简单说一下思路。 2、给出你代码所用的时间复杂度和空间复杂度
共以下 18 个回答
LCR 193. 二叉搜索树的最近公共祖先
利用二叉搜索树的特性求解,在同侧则向其方向搜索,在两侧直接返回结果
解题思路
– 二叉搜索树任意节点(包括根节点)左边金额<节点金额<右边金额
– 2个节点的分布可能都在根节点左侧(递归),或者右侧(递归),或者双侧(根节点就是CommonAncestor)
【题解1】
时间复杂度O(N),空间复杂度O(N)。
一开始没想出来,看了答案写的
刚开始想:分别记录从root到p、q的path路径,然后遍历路径直到p或q
递归
时间复杂度O(n)
空间复杂度O(1)
思路:使用 搜索树性质
思路:二叉搜索树的特性,比较根节点的值和p q的值
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
int min = Math.min(p.val, q.val);
int max = Math.max(p.val, q.val);
TreeNode lca = root;
while (root != null) {
if (root.val >= min && root.val <= max) {
lca = root;
break;
} else if (root.val > max) {
root = root.left;
} else if (root.val < min) {
root = root.right;
}
}
return lca;
}
}//二份查找
//时间复杂度O(N)空间复杂度和树高度相关
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if (root null) return null;
}
时间复杂度O(n),空间复杂度O(1)
若p和q一个比当前节点大一个小,则最近祖先就是当前节点,若都小,就在当前节点左边,若都大,就在当前节点右边
on on
思路:参考注释
时间复杂度:O(n)
空间复杂度:O(n)
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root null){
return root;
}
if(root.val > p.val && root.val > q.val){
return lowestCommonAncestor(root.left, p, q);
}
if(root.val < p.val && root.val < q.val){
return lowestCommonAncestor(root.right, p, q);
}
return root;
}
}
时间:O(n)
空间:O(n)