js(79)~剑指 Offer 68 - I. 二叉搜索树的最近公共祖先

62 阅读1分钟

大前提是知道二叉搜索书的特性左《根《右 的值

然后思路 很简单 但是不看题解的话我还是想不起来怎么版..
所以如果一个比我小,一个比我大就返回我;
都比我大就递归我的右边
都比我小就递归我的左边
就是写法常规思路有两个,一个用递归一个不用递归

方法一 递归

var lowestCommonAncestor = function(root, p, q){
 if(!root) return null;
 // 跟节点比两个都大 说明这两个都是在跟节点的左边
 if(root.val>p.val && root.val>q.val) {
     return lowestCommonAncestor(root.left, p,q);
 }
 // 跟上面相反在右边
 if(root.val<p.val && root.val<q.val) {
     return lowestCommonAncestor(root.right, p,q);
 }
 return root;
}

方法二 非递归

var lowestCommonAncestor = function(root, p, q){
 if(!root) return null;
  // 如果相等,公共祖先就是他们本身
  // 这段代码 加不加 都行 加上效率会更改一点儿
    if (p.val === q.val) return p;
 while(root) {
    // 跟节点比两个都大 说明这两个都是在跟节点的左边
    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;
    } else { return root;}  
   
}
}