这个题考的是二叉树的遍历,节点路径的计算方式,需要回溯。
剩下的就比较简单了,就是找两个路径最后一个相同的值,就是公共祖先了。
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @param o1 int整型
* @param o2 int整型
* @return int整型
*/
vector<int> path;
vector<int> path1;
vector<int> path2;
int lowestCommonAncestor(TreeNode* root, int o1, int o2) {
if(root == NULL){
return -1;
}
int res = root->val;
// write code here
findPath(root, o1,o2);
for(int i=0;i<path1.size() && i < path2.size();i++){
if(path1[i] == path2[i]){
res = path1[i];
}else{
break;
}
}
return res;
}
void findPath(TreeNode* root, int o1, int o2){
if(root == NULL){
return;
}
path.push_back(root->val);
if(root->val == o1){
path1 = path;
}else if(root->val == o2){
path2 = path;
}
if(!path1.empty() && !path2.empty()){
return;
}
if(root->left != NULL){
findPath(root->left, o1, o2);
path.pop_back();
}
if(root->right != NULL){
findPath(root->right, o1, o2);
path.pop_back();
}
}
};



京公网安备 11010502036488号