Open songyy5517 opened 1 year ago
思路:自上而下搜索第一个两节点区间内的节点
复杂度分析
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @param p int整型
* @param q int整型
* @return int整型
*/
public int lowestCommonAncestor (TreeNode root, int p, int q) {
// write code here
// 思路:第一个分开两个节点的节点。
// 1. 异常处理
if (root == null)
return -1;
// 2. 自上而下进行搜索
while ((root.val - p) * (root.val - q) > 0){
if (root.val > p)
root = root.left;
else
root = root.right;
}
return root.val;
}
}
2024/2/1 2024/3/4
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]
示例 1:
示例 2:
分析 这道题的主要考察的是二叉搜索数,最近祖先的性质。从根节点开始,若当前节点都大于p和q,则说明p,q都位于当前节点的左子树;若当前节点都小于p和q,则说明p,q都位于当前节点的右子树。子树中一定存在节点将p,q分开,这个节点就是它们的最近公共祖先。因此,我们只需要从根节点开始,自上而下搜索第一个位于区间[p,q]内的节点即可。