按照二叉搜索树的特性,我们只需要找到第一个"大于p小于q"或者"大于q小于p"的节点,或者等于p或等于q的节点即可。
当前节点大于p和q时,说明公共祖先在左子树。
当前节点小于p和q时,说明公共祖先在右子树。
csharp
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
while(!((root.val > p.val && root.val <q.val)||(root.val < p.val && root.val >q.val) || root.val ==q.val ||root.val ==p.val)){
if(root.val >p.val&&root.val >q.val) root = root.left;
else if(root.val <p.val&&root.val <q.val) root = root.right;
}
return root;
}
}