首页 > 其他 > 详细

leetcode——Lowest Common Ancestor of a Binary Search Tree

时间:2015-08-11 21:33:40      阅读:325      评论:0      收藏:0      [点我收藏+]

题目

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;
     }

版权声明:本文为博主原创文章,未经博主允许不得转载。

leetcode——Lowest Common Ancestor of a Binary Search Tree

原文:http://blog.csdn.net/langduhualangdu/article/details/47426339

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!