题解 | #在二叉树中找到两个节点的最近公共祖先#
在二叉树中找到两个节点的最近公共祖先
http://www.nowcoder.com/practice/e0cc33a83afe4530bcec46eba3325116
* 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> o1_v;
vector<int> o2_v;
int lowestCommonAncestor(TreeNode* root, int o1, int o2) {
// write code here
o1_v.push_back(-1);
o2_v.push_back(-1);
dfs(root, o1, o1_v);
dfs(root, o2, o2_v);
int res=0;
for(int i=0;i<o1_v.size();i++){
if(o1_v[i]==o2_v[i]) res=o1_v[i];
else break;
}
return res;
}
void dfs(TreeNode* root, int val, vector<int>& v){
if(v.back()==val) return;
if(root==nullptr) return;
v.push_back(root->val);
dfs(root->left, val, v);
dfs(root->right, val, v);
if(v.back()!=val)
v.pop_back();
}
};