码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode "Lowest Common Ancestor of a BST"

时间:2015-07-11 07:53:00      阅读:132      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!