递归法
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; }}