题目

示例

思路
这道题可以用和236题一样的方法,递归。
但是这里是二叉搜索树,其左子节点<根节点<右子节点。
因此有三种情况
- p.val<root.val&&q.val<root.val
此时,p,q均位于root的左子树,root = root.left,继续遍历root的左子树 - p.val>root.val&&q.val>root.val
此时,p,q均位于root的右子树,root = root.right,继续遍历root的右子树 - p.val<root.val<q.val(或相反)
此时,root为最近公共祖先。
具体代码
/**
* 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) {
TreeNode node = root;
while(node != null){
if(p.val<node.val&&q.val<node.val){
node = node.left;
}
else if(p.val>node.val&&q.val>node.val){
node = node.right;
}else{
return node;
}
}
return null;
}
}
时间复杂度:O(N)
空间复杂度:O(1)
331

被折叠的 条评论
为什么被折叠?



