/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
queue<TreeNode* > pp;
queue<TreeNode* > qq;
search(root, p, pp);
search(root, q, qq);
TreeNode* res = NULL;
while(pp.front()==qq.front())
{
res = pp.front();
pp.pop();
qq.pop();
}
return res;
}
void search(TreeNode* root, TreeNode* p, queue<TreeNode* > &pp)
{
TreeNode* tmp = root;
while(tmp!=p)
{
pp.push(tmp);
if(p->val > tmp->val)
tmp = tmp->right;
else
tmp = tmp->left;
}
pp.push(p);
}
};