/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* };
*/
class Solution {
public:
int flag = 0;
int lowestCommonAncestor(TreeNode* root, int o1, int o2) {
vector<int> path1, path2;
dfs(root, path1, o1);
flag = 0;
dfs(root, path2, o2);
int res = 0;
for(int i=0; i<path1.size() && i<path2.size(); i++){
if(path1[i] == path2[i]){ //共同祖先的之前的路径是相同的
res = path1[i];
}else{
break;
}
}
return res;
}
void dfs(TreeNode* root,vector<int>& path, int target){
if(root==nullptr){
return;
}
if(root->val == target){
path.push_back(root->val); //自己也可能是根节点,添加进去检测
flag = 1;
return;
}
path.push_back(root->val);
dfs(root->left, path, target);
if(flag == 1){
return;
}
dfs(root->right, path, target);
if( flag == 1 ){
return;
}
path.pop_back();
return;
}
};