/**
* 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;
}