分别用两个数组记录寻找到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; } };