首页 > 其他 > 详细

LeetCode "Lowest Common Ancestor of a BST"

时间:2015-07-11 07:51:58      阅读:149      评论:0      收藏:0      [点我收藏+]

First please note, it is BST. So it is about value compare.

class Solution 
{
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) 
    {
        if(!root) return nullptr;
        int sm = std::min(p->val, q->val);
        int lg = std::max(p->val, q->val);
        
        if( (root->val > sm && root->val < lg) || (root->val == sm || root->val == lg))
            return root;
        else if(root->val > lg)    
            return lowestCommonAncestor(root->left, p, q);
        else if(root->val < sm)
            return lowestCommonAncestor(root->right, p, q);
        return nullptr;
    }
};

And what if it is a general tree, not necessarily a BST?

// unsigend char as record
typedef unsigned char uchar;
class Solution 
{
    TreeNode *pret;
    uchar go(TreeNode *root, TreeNode* p, TreeNode *q)
    {
        if (!root) return 0;
        uchar rec = 0;

        rec |= (root == p) ? 0x1 : 0;
        rec |= (root == q) ? 0x2 : 0;

        uchar rleft = go(root->left, p, q);
        if(rleft ==0x3)
        {
            return 0x3;
        }
        if (rec && ((rec | rleft) == 0x3))
        {
            pret = root;
            return 0x3;
        }

        uchar rright= go(root->right, p, q);
        if(rright ==0x3) return 0x3;
        if (rec && ((rec | rright) == 0x3))
        {
            pret = root;
            return 0x3;
        }

        if ((rleft | rright )== 0x3)
        {
            pret = root;
        }

        return rec | rleft | rright;
    }
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) 
    {
        pret = nullptr;
        go(root, p, q);
        return pret;
    }
};

LeetCode "Lowest Common Ancestor of a BST"

原文:http://www.cnblogs.com/tonix/p/4637974.html

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