分别用两个数组记录寻找到o1和o2的路径上的值,同时遍历两数组,最后一个相等的数就是他们的最近公共祖先。
class Solution {
public:
bool flag=0;
void path(TreeNode* root,vector<int>& p,int o){
if(root->val==o){
flag=1;
return;
}
if(root->left){
p.push_back(root->left->val);
path(root->left,p,o);
if(!flag) p.pop_back();
else return;
}
if(root->right){
p.push_back(root->right->val);
path(root->right,p,o);
if(!flag) p.pop_back();
else return;
}
}
int lowestCommonAncestor(TreeNode* root, int o1, int o2) {
// write code here
vector<int> p1,p2;
p1.push_back(root->val);
p2.push_back(root->val);
path(root,p1,o1);
flag=0;
path(root,p2,o2);
int n=min(p1.size(),p2.size()),res;
for(int i=0;i<n;i++){
if(p1[i]==p2[i] && p1[i+1]!=p2[i+1]){
res=p1[i];
break;
}
}
return res;
}
};

京公网安备 11010502036488号