您的位置:首页 > 其它

LeetCode "Lowest Common Ancestor of a BST"

2015-07-11 06:27 302 查看
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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: