class Solution {
public:
/**
 * 
 * @param root TreeNode类 
 * @param o1 int整型 
 * @param o2 int整型 
 * @return int整型
 */
void func(TreeNode* root, int o1, vector<TreeNode*> &path,vector<TreeNode*> &result, int falg)
{
    //结束条件
    if(!root || falg)
    {
        return;
    }
    //存入到临时容器中
    path.push_back(root);
    //找到了
    if(root->val == o1)
    {
        //将临时容器的值赋给最终结果容器
        falg = 1;
        result = path;
    }
    //继续递归
    func(root->left,  o1, path,result, falg);
    func(root->right, o1, path,result, falg);
    //没有的话删除最后进来的
    path.pop_back();
}
int lowestCommonAncestor(TreeNode* root, int o1, int o2) {
    // write code here
    //存放o1路径
    vector<TreeNode*> p1;
    //存放o2路径
    vector<TreeNode*> p2;
    //临时存放容器
    vector<TreeNode*> path;
    //标志位表示找到了,直接结束递归
    int falg = 0;
    //查找o1路径
    func(root, o1, path,p1, falg);
    //清楚临时容器
    path.clear();
    //查找o2路径
    func(root, o2, path,p2, falg);
    //比较俩路劲的长度,选择短的一段
    int len = 0;
    if(p1.size() < p2.size())
    {
        len = p1.size();
    }
    else{
        len = p2.size();
    }
    //比较值,得到最先出现的相同数字,即为最近公共祖先
    TreeNode* result ;
    for(int i = 0; i < len; i++)
    {
        if(p1[i] == p2[i])
        {
            result = p1[i];
        }
    }
    return result->val;
}

};