递归法
public class Solution {
/**
* 因为是二叉搜索树,所以可以使用其特性快速找到结果
* 如果两个节点都在 root 的左边,就往左走一步
* 如果两个节点都在 root 的右边,就往右走一步
* 如果两个节点分别在 root 左边和右边,直接返回 root
*/
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if (p.val < root.val && q.val < root.val) {
return lowestCommonAncestor(root.left, p, q);
} else if (p.val > root.val && q.val > root.val) {
return lowestCommonAncestor(root.right, p, q);
}
return root;
}
}
迭代法
public class Solution {
/**
* 因为是二叉搜索树,所以可以使用其特性快速找到结果
* 如果两个节点都在 root 的左边,就往左走一步
* 如果两个节点都在 root 的右边,就往右走一步
* 如果两个节点分别在 root 左边和右边,直接返回 root
*/
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
while(true) {
if (p.val < root.val && q.val < root.val) {
root = root.left;
} else if (p.val > root.val && q.val > root.val) {
root = root.right;
} else {
break;
}
}
return root;
}
}