leetcode——Lowest Common Ancestor of a Binary Search Tree

题目

Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST.

思路

题目要求一个二叉排序树的两个节点的公共父节点,说通俗点,其实就是这两个节点所在的分支是从哪里开始分叉的。求出这个分叉点。

对于二叉排序树,它的一个特点就是:一个节点的左子树节点都小于该节点,而一个节点的右子数的各节点都大于该节点。
因此,我们可以通过寻找这两个节点的中间节点来寻找公共父节点。
再衍生分析一下,如果某个节点同时大于所给节点,说明,所求节点一定在当前节点的左子树上;同理,如果当前节点同时小于所给的两个节点,则所求节点一定在该节点的右子树上。

需要注意的是:在求的过程中,还需要考虑如果所求节点是两个节点中的一个的情况。还有在求出当前节点时,别忘了验证一下,该节点为根的树上有没有这两个所给节点(因为有可能所给节点不在树上)。

代码

public boolean exist(TreeNode root, TreeNode pNode){
        while(root!=null){
            if(pNode.val==root.val)
                return true;
            else{
                if(pNode.val>root.val)
                    root = root.right;
                else {
                    root = root.left;
                }
            }
        }
        return false;
    }
     public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
         TreeNode currentNode = root;

         if(root==null)
             return null;
         while(currentNode!=p && currentNode!=q){
             if(p.val<currentNode.val && q.val<currentNode.val){
                 currentNode = currentNode.left;
             } else if(p.val>currentNode.val && q.val>currentNode.val){
                 currentNode = currentNode.right;
             } else{
                 if(exist(currentNode, p) && exist(currentNode, q))
                     return currentNode;
                 else {
                    return null;
                }
             }
         }
         if(exist(currentNode, p) && exist(currentNode, q))
             return currentNode;
         return null;
     }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值