/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param root TreeNode类 
 * @param p int整型 
 * @param q int整型 
 * @return int整型
 */
int lowestCommonAncestor(struct TreeNode* root, int p, int q ) {
    // write code here
    
    if(p==q){
        return p;
    }
    int* path_p = malloc(sizeof(int)*10001);
    int* path_q = malloc(sizeof(int)*10001);
    
    int cnt_p = 0, cnt_q = 0;
    
    struct TreeNode* p_node = root;
    struct TreeNode* q_node = root;
    
    while(p_node->val != p){
        path_p[cnt_p++] = p_node->val;
        
        if(p < p_node->val){
            p_node = p_node->left;
        }else{
            p_node = p_node->right;
        }
    }
    path_p[cnt_p++] = p_node->val;
    
    while(q_node->val != q){
        path_q[cnt_q++] = q_node->val;
        if(q < q_node->val){
            q_node = q_node->left;
        }else{
            q_node = q_node->right;
        }
    }
    
    path_q[cnt_q++] = q_node->val;
    
    int ret = 0;
    
    for(int i = cnt_p-1; i >= 0; i--){
        for(int j = cnt_q-1; j >= 0; j--){
            if(path_p[i] == path_q[j]){
                ret = path_p[i];
                return ret;
            }
        }
    }
    return ret;
    
}