解题思路
对于每一个节点,p,q有三种情况
- p,q都在该节点的右子树上
- p,q都在该节点的左子树上
- p,q分别位于该节点的左右子树(这种情况,该节点就是p,q的最近公共节点)
本题利用了二叉搜索树(排序树)的特性,根据val值判断了属于上述那种情况
root.val<p.val&&root.val<q.val(p,q都在右子树)root.val>p.val&&root.val>q.val(p,q都在左子树)
迭代法
var lowestCommonAncestor = function(root, p, q) {
while(root){
if(root.val<p.val&&root.val<q.val){
root=root.right
}
else if(root.val>p.val&&root.val>q.val){
roor=root.left
}
else{
return root
}
}
递归法
var lowestCommonAncestor = function(root, p, q) {
if(root.val<p.val&&root.val<q.val){
return lowestCommonAncestor(root.right,p,q)
}
else if(root.val>p.val&&root.val>q.val){
return lowestCommonAncestor(root.left,p,q)
}
else{
return root
}
}