注前序遍历+栈思想
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @param o1 int整型
* @param o2 int整型
* @return int整型
*/
int lowestCommonAncestor(TreeNode* root, int o1, int o2) {
// write code here
if(!root){
return 0;
}
int result;
vector<int> o1_path;
vector<int> o2_path;
vector<int> path;
int finish = 0;
preorder(root, o1_path,o1,finish,path);
path.clear();
finish = 0;
preorder(root, o2_path,o2,finish,path);
int min_length;
if(o1_path.size()<=o2_path.si***_length = o1_path.size();
}else{
min_length = o2_path.size();
}
for(int i = 0; i< min_length;i++){
if(o1_path[i]==o2_path[i]){
result = o1_path[i];
}
}
return result;
}
void preorder(TreeNode* root, vector<int>& result, int target, int &finish, vector<int>& path ){
if(!root || finish){
return;
}
path.push_back(root->val);
if(root->val == target){
finish = 1;
result = path;
}
preorder(root->left, result, target, finish,path);
preorder(root->right,result, target,finish,path);
path.pop_back();
}
};
京公网安备 11010502036488号